• C++程序设计实验考试准备资料(2019级秋学期)


    程序设计实验考试准备资料

    ——傲珂

    #include<bits/stdc++.h>

    C++常用函数:

    <math.h>头文件

    floor()

    函数原型:double floor(double x);

    作用:用于输出浮点类型中小于此数的最大整数

    注:floor(n+0.5)可用于进行四舍五入的处理

    ceil()

    函数原型:double ceil(double x);

     作用:用于输出浮点类型中大于此数的最大整数

    atan()

    作用:用来求π的值:atan(1)=π/4    π=4.0*atan(1)

    int abs ( int x) 求整数x的绝对值 绝对值
    double fabs(double x) 求实数x的绝对值 绝对值


    long labs (long x) 求长整型数的绝对值 绝对值
    double acos(double x) 计算arcos(x)的值 计算结果
    double asin(double x) 计算arsin(x)的值 计算结果
    double atan(double x) 计算arctan(x)的值 计算结果
    double cos(double x) 计算cos(x)的值 计算结果
    double cosh(double x) 计算x的双曲余弦cosh(x)的值 计算结果
    double exp(double x) 求的值 计算结果
    double fmod(double x, double y) 求x/y的余数 余数的双精度数
    double log(double x) 计算In(x)的值 计算结果
    double log10(double x) 计算的值 计算结果
    double modf(double x, double *y) 取x的整数部分送到y所指向的单元格中 x的小数部分
    double sin(double x) 计算sin(x)的值 计算结果
    double tan(double x) 计算tan(x)的值 计算结果
    double sqrt(double x) 求的值 计算结果

     头文件#include <stdlib.h>

    double atof(const char *s) 将s所指向的字符串转换成实数 实数值
    int atoi(const char *s) 将s所指向的字符串转换成整数 整数值
    long atol(const char *s) 将s所指的字符串转换成长整数 长整数值

    max(a, b) 求两个数中的大数 大数 参数为任意类型
    min(a,b) 求两个数中的小数 小数 参数为任意类型

    int rand(void) 产生一个随机整数 随机整数
    void srand(unsigned int) 初始化随机数产生器

    ★C++标准库提供了兼容C语言的字符串处理函数

    #include <string.h>

    1. 字符串复制函数 (string copy)

     △strcpy

        strcpy(str1,str2);    //复制str2到str1

     △strncpy

      strncpy(str1,str2,n);   //复制str2中不超过n个字符的字符串复制到str1

     2. 字符串连接函数 (string catenate)

      △strcat

      strcat(str1,str2);       //将str2连接到str1,包括空字符,并且str2无变化

      △sstrncat

      strncat(str1,str2,n);     //将str2中不超过n个字符的字符串连接到str1上

     3. 字符串比较函数(string compare)

      △strcmp

      strcmp(str1,str2);         //自左向右比较str1和str2里面的字符的ASCII数值,直到出现不同字符或者空字符为止

     4. 计算字符串长度函数(string length)

     △strlen

     L=strlen(str1); l=sizeof str1;                //字面意思(但是不包括空字符)(注意:sizeof计算的是字符数组的长度)

     5.  字符串转化为数值函数;

     △atof                                           //双精度浮点型

     △atoi                                           //整形

     6. 数据写入字符串的格式化输出函数sprintf

      sprintf(str,“%d*%d=%d",1,2,2) ;   //输出结果不显示,存储在str中(“1*2=2”)

     7. 从字符串读入数据的格式化输入函数sscanf

     sscanf(“12 34”,“%d%d",&a,&b);

     8. 返回一个指针,指向字符串s1中字符ch的第一次出现的位置;strchr(s1,ch);

     9. 返回一个指针,指向字符串s1中字符串s2的第一次出现的位置;strstr(s1,s2);

    ```cpp

     1 #include <iostream>
     2 
     3 #include <cstring>
     4 
     5  
     6 
     7 using namespace std;
     8 
     9  
    10 
    11 int main ()
    12 
    13 {
    14 
    15    char str1[11] = "Hello";
    16 
    17    char str2[11] = "World";
    18 
    19    char str3[11];
    20 
    21    int  len ;
    22 
    23  
    24 
    25    // 复制 str1 到 str3
    26 
    27    strcpy( str3, str1);
    28 
    29    cout << "strcpy( str3, str1) : " << str3 << endl;
    30 
    31  
    32 
    33    // 连接 str1 和 str2
    34 
    35    strcat( str1, str2);
    36 
    37    cout << "strcat( str1, str2): " << str1 << endl;
    38 
    39  
    40 
    41    // 连接后,str1 的总长度
    42 
    43    len = strlen(str1);
    44 
    45    cout << "strlen(str1) : " << len << endl;
    46 
    47  
    48 
    49    return 0;
    50 
    51 }

    ```

     ★C++中的字符串类(动态内存管理(不必担心存储空间是否足够))(面向对象)

     #include <string>

     输入 getline(cin,str);(输入一行,回车结束)

     11. 复制(=)

         str1 =“java”;

      2. 将string转换为c风格字符串,返回char指针

          str1.c_str();

      3.  把str1中从pos开始的n个字符复制到s1字符组

            str1.copy(s1,n,pos);

       4. 将C风格字符串S1开始的n个字符赋值给str1

             str1.assign(S1,n);

       5.  string对象允许使用加号(+)和复合赋值(+=)运算符来实现两 个字符串连接操作。

       str1="12" , str2="AB" , str3="CD";

        str1 = str2 + str3; //str1结果为ABCD

        str1 = str1 + "PHP"; //str1结果为12PHP

        str1 += str3; //str1结果为12CD

       6.  string对象可以使用关系运算符来对字符串进行比较

       str1="ABC" , str1="XYZ";

       str1 > str2; //结果为假

        str1 == str2;//结果为假

        7. string对象可以调用其成员函数来实现字符串处理,这里列举一些 重要的操作,更详细的内容可以查阅C++标准库手册。

         str1="ABCDEFGHIJK"; //获取字符串的长度

         n = str1.size(); //n为11

         n = str1.length(); //n为11

         b = str1.empty(); //b为假 //检查字符串是否为空字符串

    //得到子字符串 str2 = str1.substr(2,4); //从下标2开始的4个字符,str2为CDEF

    //查找子字符串 n = str1.find("DEF",pos); //从pos开始查找字符串"DEF"在str1中的位置,n为 3

    //删除字符 str1.erase(3,5); //从下标3开始往后删5个字符,str1变为ABCIJK

    //增加字符 str1.append("12345",1,3); //在str1末尾增加"12345"下标从1开始的3个字符, 即"234"

    //字符串替换和插入操作 str1.replace(p0,n0,S1,n); //删除从p0开始的n0个字符,然后在p0处插入字符串 S1前n个字符

     str1.replace(p0,n0,str2,pos,n); //删除从p0开始的n0个字符,然后在p0处插 入字符串str2中pos开始的前n个字符

     str1.insert(p0,S1,n); //在p0位置插入字符串S1前n个字符

     str1.insert(p0,str2,pos,n); //在p0位置插入字符串str2中pos开始的 前n个字符

     字符串对象数组  可以定义字符串对象数组,即数组元素是字符串对象,定义形式与 数组类似,

     例如: string SY[5]={"Jiang","Cao","Zou","Liu","Wei"}; //定义字符串对象数组且初始化

    string SY[5]={"123","12","1234","1","12345"}; //长度 3,2,4,1,5

    char SA[5][20]={"123","12","1234","1","12345"}; //长度均是20

    ```cpp

     1 #include <iostream>
     2 
     3 #include <string>
     4 
     5  
     6 
     7 using namespace std;
     8 
     9  
    10 
    11 int main ()
    12 
    13 {
    14 
    15    string str1 = "Hello";
    16 
    17    string str2 = "World";
    18 
    19    string str3;
    20 
    21    int  len ;
    22 
    23  
    24 
    25    // 复制 str1 到 str3
    26 
    27    str3 = str1;
    28 
    29    cout << "str3 : " << str3 << endl;
    30 
    31  
    32 
    33    // 连接 str1 和 str2
    34 
    35    str3 = str1 + str2;
    36 
    37    cout << "str1 + str2 : " << str3 << endl;
    38 
    39  
    40 
    41    // 连接后,str3 的总长度
    42 
    43    len = str3.size();
    44 
    45    cout << "str3.size() :  " << len << endl;
    46 
    47  
    48 
    49    return 0;
    50 
    51 }

    ```

    1. append() -- 在字符串的末尾添加字符

     2. find() -- 在字符串中查找字符串

     4. insert() -- 插入字符

     5. length() -- 返回字符串的长度

     6. replace() -- 替换字符串

     7. substr() -- 返回某个子字符串

    ```cpp

     1 #include <iostream>
     2 
     3 #include <string>
     4 
     5 using namespace std;
     6 
     7  
     8 
     9 int main()
    10 
    11 {
    12 
    13     //定义一个string类对象
    14 
    15     string http = "onlinetutor";
    16 
    17  
    18 
    19    //打印字符串长度
    20 
    21    cout<<http.length()<<endl;
    22 
    23  
    24 
    25     //拼接
    26 
    27     http.append("/C++");
    28 
    29     cout<<http<<endl; //打印结果为:onlinetutor/C++
    30 
    31  
    32 
    33     //删除
    34 
    35     int pos = http.find("/C++"); //查找"C++"在字符串中的位置
    36 
    37     cout<<pos<<endl;
    38 
    39     http.replace(pos, 4, "");   //从位置pos开始,之后的4个字符替换为空,即删除
    40 
    41     cout<<http<<endl;
    42 
    43  
    44 
    45     //找子串runoob
    46 
    47     int first = http.find_first_of("."); //从头开始寻找字符'.'的位置
    48 
    49     int last = http.find_last_of(".");   //从尾开始寻找字符'.'的位置
    50 
    51     cout<<http.substr(first+1, last-first-1)<<endl; //提取"runoob"子串并打印
    52 
    53  
    54 
    55     return 0;
    56 
    57 }

    ```

    ```cpp

     1 #include<iostream>
     2 
     3 using namespace std;
     4 
     5  
     6 
     7 #define N 100
     8 
     9 int main()
    10 
    11 {
    12 
    13     char X[N];
    14 
    15     cin.getline(X,N);                               //以cin.getline形式输入
    16 
    17     int a=0,b=0;
    18 
    19     for(int i=0;i<N;i++)
    20 
    21     {
    22 
    23         if(X[i]=='#')                                      //为#为结束标志
    24 
    25             break;
    26 
    27         if(X[i]>='0'&&X[i]<='9')
    28 
    29             a++;                                         //统计数字个数
    30 
    31         if((X[i]>='a'&&X[i]<='z')||(X[i]>='A'&&X[i]<='Z'))
    32 
    33             b++;                                      //统计英文字母个数
    34 
    35     }
    36 
    37     cout<<a<<endl<<b<<endl;
    38 
    39     return 0;
    40 
    41 }

    ```

    将一个数字逆序:

     1 Int nixu(int n){
     2 
     3     int t,k=0;
     4 
     5     for(t=n;t>0;t=t/10){
     6 
     7         k=10*k+t%10;
     8 
     9     }
    10 
    11     return k;
    12 
    13 }

    该年的第几天:(输入日期YYYY-MM-DD)

     1 int count(int Y, int M, int D){
     2 
     3 const short MD[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     4 
     5 int s,i;
     6 
     7 s=D;
     8 
     9 for (i=0;i<M;i++) s+=MD[i];
    10 
    11 if (((Y%4==0)&&(Y%100!=0)||(Y%400==0)) && (M>2)) s++;
    12 
    13 return s;
    14 
    15 }
    16 
    17 main(){
    18 
    19 int y,m,d;
    20 
    21 scanf("%4d%*c%2d%*c%2d",&y,&m,&d);//注意这个输入方式(*的位置可以输入-等符号)
    22 
    23 cout<<count(y,m,d)<<endl;
    24 
    25 return 0;
    26 
    27 }
     

    判断一个数是否是素数:

     1 Int judge_prime(int n){
     2 
     3 If(n<2) return 0;
     4 
     5 If(n==2) return 1;
     6 
     7 For(int i=2;i<=sqrt(n);i++){
     8 
     9 If(n%i==0) return 0;
    10 
    11 }
    12 
    13 Return 1;
    14 
    15 }
     

    二分法求根:

     1 #include<iostream>
     2 
     3 #include<cmath>
     4 
     5 #include<iomanip>
     6 
     7 using namespace std;
     8 
     9 double f(double x){
    10 
    11     return 2*x*x*x-4*x*x+3*x-6;}
    12 
    13 int main(){
    14 
    15     double a,b,x;
    16 
    17     cin>>a>>b;
    18 
    19     while(abs(a-b)>0.001){  //abs()取绝对值函数
    20 
    21         x=(a+b)/2;
    22 
    23         if(f(x)*f(a)<0) b=x;
    24 
    25         else a=x;
    26 
    27     }
    28 
    29     cout<<fixed<<setprecision(2)<<x<<endl;
    30 
    31 }
     

    平方根的迭代公式:

     1 double sqrt(double a,double x0)
     2 
     3 {
     4 
     5     double x1,y;
     6 
     7     x1=(x0+a/x0)/2;
     8 
     9     if(fabs(x1-x0)>1e-5)
    10 
    11     y=sqrt(a,x1);
    12 
    13     else
    14 
    15     y=x1;
    16 
    17     return y;
    18 
    19 }

    你会存钱吗?

     1 #include<iostream>
     2 
     3 #include<cmath>
     4 
     5 #include<iomanip>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 
    11 {
    12 
    13     int i8,i5,i3,i2,i1,n8,n5,n3,n2,n1;
    14 
    15     double m=0,term;
    16 
    17     for(i8=0;i8<3;i8++)
    18 
    19         for(i5=0;i5<=(20-8*i8)/5;i5++)
    20 
    21             for(i3=0;i3<=(20-8*i8-5*i5)/3;i3++)
    22 
    23                 for(i2=0;i2<=(20-8*i8-5*i5-3*i3)/2;i2++)
    24 
    25                 {
    26 
    27                     i1=20-8*i8-5*i5-3*i3-2*i2;
    28 
    29 term=2000.0*pow((double)(1+0.0063*12),
    30 
    31                 (double)i1)*pow((double)(1+2*0.0063*12),
    32 
    33                 (double)i2)*pow((double)(1+3*0.0069*12),
    34 
    35                 (double)i3)*pow((double)(1+5*0.0075*12),
    36 
    37                 (double)i5)*pow((double)(1+8*0.0084*12),
    38 
    39                 (double)i8);
    40 
    41  
    42 
    43 if(term>m){   m=term; n1=i1;   n2=i2;   n3=i3;  n5=i5;   n8=i8;    };
    44 
    45                 };
    46 
    47                 cout<<n8<<" "<<n5<<" "<<n3<<" "<<n2<<" "<<n1<<endl;
    48 
    49                 cout<<fixed<<setprecision(2)<<m<<endl;
    50 
    51                 return 0;
    52 
    53 }
     

    找零:(最少张数人民币)

     1 void change(double m,double c){
     2 
     3     double a[12]={0.01,0.02,0.05,0.1,0.2,0.5,1,2,5,10,20,50};
     4 
     5     double s1,s2;
     6 
     7     s1=c-m;
     8 
     9     int i,b[12],d;
    10 
    11     for(b[0]=0;b[0]<10000;b[0]++){
    12 
    13         for(b[1]=0;b[1]<5000;b[1]++){
    14 
    15             for(b[2]=0;b[2]<2000;b[2]++){
    16 
    17                 for(b[3]=0;b[3]<1000;b[3]++){
    18 
    19                     for(b[4]=0;b[4]<500;b[4]++){
    20 
    21                         for(b[5]=0;b[5]<200;b[5]++){
    22 
    23                             for(b[6]=0;b[6]<100;b[6]++){
    24 
    25                                 for(b[7]=0;b[7]<50;b[7]++){
    26 
    27                                     for(b[8]=0;b[8]<20;b[8]++){
    28 
    29                                         for(b[9]=0;b[9]<10;b[9]++){
    30 
    31                                             for(b[10]=0;b[10]<5;b[10]++){
    32 
    33                                                 for(b[11]=0;b[11]<2;b[11]++){
    34 
    35                                                     s2=a[0]*b[0]+a[1]*b[1]+a[2]*b[2]+a[3]*b[3]+a[4]*b[4]+a[5]*b[5]+a[6]*b[6]+a[7]*b[7]+a[8]*b[8]+a[9]*b[9]+a[10]*b[10]+a[11]*b[11];
    36 
    37                                                     if(s1==s2) {
    38 
    39                                                         for(i=0;i<12;i++){
    40 
    41                                                             cout<<a[i]<<"	"<<b[i]<<endl;
    42 
    43                                                         }
    44 
    45                                                         for(i=0,d=0;i<12;i++){
    46 
    47                                                             d=d+b[i];
    48 
    49                                                         }
    50 
    51                                                         cout<<d<<endl;
    52 
    53                                                         return ;
    54 
    55  

    1的传奇:(by 马哥)

      1 #include<stdio.h>
      2 
      3 //#include<math.h>
      4 
      5 int mypower(int baseNum,int repeatNum)
      6 
      7 {
      8 
      9     if (repeatNum == 0)
     10 
     11         return 1;
     12 
     13     int i;
     14 
     15     int result=1;
     16 
     17     for (i = 0; i < repeatNum; i++)
     18 
     19         result *= baseNum;
     20 
     21     return result;
     22 
     23 }
     24 
     25 /*
     26 
     27     使用算法进行计算
     28 
     29     输入参数:
     30 
     31         N:要计算的数
     32 
     33         trace: 代表是否进行跟踪输出,0:不输出;1:输出
     34 
     35     输出参数:计算结果
     36 
     37 */
     38 
     39 int calculate(int N,int trace)
     40 
     41 {
     42 
     43     int i;
     44 
     45     int result=0,j=0;
     46 
     47     int totalNum = 0;
     48 
     49     int prevModNum = 0;
     50 
     51  
     52 
     53    while(N>0)
     54 
     55    {   i=N%10;
     56 
     57        N=N/10;
     58 
     59  
     60 
     61        if (i>1)
     62 
     63        {
     64 
     65            result=mypower(10,j)+i*(mypower(10,j-1)*j);
     66 
     67            totalNum += result;
     68 
     69        }
     70 
     71        else if (i == 0)
     72 
     73        {
     74 
     75             if (trace==1)
     76 
     77                 printf("ignore 0
    ");
     78 
     79        }
     80 
     81        else
     82 
     83        {
     84 
     85            result = (prevModNum+1)+i*(mypower(10,j-1)*j);
     86 
     87            if (trace==1)
     88 
     89                 printf("result=%d------(%d+1)=%d-----i*pow(10,j-1)*j=%d
    ",result,prevModNum,(prevModNum+1),(i*mypower(10,j-1)*j));
     90 
     91            totalNum += result;
     92 
     93        }
     94 
     95         if (trace==1)
     96 
     97             printf("跟踪输出:j=%d,i=%d,N=%d,prevModNum=%d,result=%d,totalSum=%d
    ",j,i,N,prevModNum,result,totalNum);
     98 
     99  
    100 
    101        prevModNum = prevModNum+i*mypower(10,j);
    102 
    103        j=j+1;
    104 
    105        //printf("pow(10,%d)=%d,prevModNum=%d
    ",j,pow(10,j),prevModNum);
    106 
    107    }
    108 
    109    //result+=1;
    110 
    111    if (trace == 1)
    112 
    113         printf("%d
    ",totalNum);
    114 
    115  
    116 
    117     return totalNum;
    118 
    119  
    120 
    121 }
    122 
    123  
    124 
    125 int main()
    126 
    127 {
    128 
    129     int willTrace = 0;
    130 
    131     int inputNumber;
    132 
    133     scanf("%d",&inputNumber);
    134 
    135  
    136 
    137     int totalNum = 0;
    138 
    139     //int totalNum1 = 0;
    140 
    141  
    142 
    143     totalNum = calculate(inputNumber,willTrace);
    144 
    145     printf("%d",totalNum);
    146 
    147  
    148 
    149     return 0;
    150 
    151 }

    排序(升序):

     1 void paixu(int a[],int n)
     2 
     3 {
     4 
     5     for(int i=0;i<n;i++){
     6 
     7         for(int j=0;j<n;j++){
     8 
     9             if(a[j]>a[j+1]){
    10 
    11                 int t=a[j];
    12 
    13                 a[j]=a[j+1];
    14 
    15                 a[j+1]=t;
    16 
    17             }
    18 
    19         }
    20 
    21     }
    22 
    23 }

    1:2:3:

     1 int main(){
     2 
     3     int n,i,s,A[9];
     4 
     5     for(n=123;n<328;n++){
     6 
     7        for(i=0,s=n;i<3;i++){
     8 
     9            A[i]=s%10;
    10 
    11            s=s/10;
    12 
    13        }
    14 
    15        for(i=3,s=2*n;i<6;i++){
    16 
    17            A[i]=s%10;
    18 
    19            s=s/10;
    20 
    21        }
    22 
    23        for(i=6,s=3*n;i<9;i++){
    24 
    25            A[i]=s%10;
    26 
    27            s=s/10;
    28 
    29        }
    30 
    31        paixu(A,9);
    32 
    33        if(judge(A,9)) cout<<n<<" "<<2*n<<" "<<3*n<<endl;
    34 
    35     }
    36 
    37     return 0;
    38 
    39 }
    40 
    41  

    合数世纪://这个世纪中没有一个数是素数

     1 int main()
     2 
     3 {
     4 
     5     int n,i,j,m,k,cnt=0;
     6 
     7     cin>>n;
     8 
     9     for(i=0;;i++){
    10 
    11         for(j=100*i,k=0;j<100*(i+1);j++){
    12 
    13             if(judge_primer(j)) break;
    14 
    15             k++;
    16 
    17             if(k==100){
    18 
    19                 cnt++;
    20 
    21                 if(cnt==n){
    22 
    23                     cout<<100*i<<ends<<100*i+99;
    24 
    25                 }
    26 
    27             }
    28 
    29         }
    30 
    31     }
    32 
    33 }
    34 
    35  

    危险的组合:(dp)对于输入的n,n<=30,求有多少个不超过n位2进制的数,有连续的3个1   /  n个盒子摆放成一排,当有3个以上U摆放在一起的时候,就会有危险,求总共有多少种危险的情况。

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 #define N 40
     6 
     7 int n,dp[N][N];
     8 
     9 long long ans;
    10 
    11 inline void DP()
    12 
    13 {
    14 
    15     memset(dp,0,sizeof(dp));
    16 
    17     dp[0][0]=1;
    18 
    19     for(int i=1;i<=n;i++)
    20 
    21     {
    22 
    23         for(int j=0;j<=2;j++)dp[i][0]+=dp[i-1][j];
    24 
    25         for(int j=1;j<=2;j++)dp[i][j]+=dp[i-1][j-1];
    26 
    27     }
    28 
    29     ans=0;
    30 
    31     for(int i=0;i<=2;i++)ans+=dp[n][i];
    32 
    33     printf("%lld
    ",(1<<n)-ans);
    34 
    35 }

    //大同小异每放置一个新的盒子,都对应2种情况:设dp[n]=当盒子数目为n的情况下,符合要求(出现连续三个U)的放置方法的情况个数。
          1. 前面n-1个盒子已经能符合要求,则第n个盒子无论是U还是L,都满足情况。情况有(2*dp[n-1])种。
          2. 前面n-1个盒子不能符合要求,即只有最后4个满足情况LUUU并且前面并没有连续的三个U的情况才能满足情况。有((1<<(n-4))-dp[n-4])种情况。

          (1<<(n-4))为n-4个盒子放置的总情况数,dp[n-4]为n-4个盒子放置出现危险(有连续三个U出现)的情况数。最后四个盒子仅一种摆法,可忽略。
          状态转移方程:

                            dp[n]=2*dp[n-1]+(1<<(n-4))-dp[n-4]

     1 #include<cstdio>
     2 
     3 #include<cstring>
     4 
     5 long long dp[100];
     6 
     7 int n,ans;
     8 
     9 int main()
    10 
    11 {
    12 
    13     memset(dp,0,sizeof(dp));
    14 
    15     dp[3]=1;
    16 
    17     dp[4]=3;
    18 
    19     for(int i=5;i<=100;i++)//记录排列i个盒子方式
    20 
    21     {
    22 
    23         dp[i]=2*dp[i-1]+(1<<(i-4))-dp[i-4];
    24 
    25     }
    26 
    27     while(scanf("%d",&n)&&n)
    28 
    29         printf("%lld
    ",dp[n]);
    30 
    31     return 0;
    32 
    33 }
     

    最大乘积:(输入n个元素组成的序列s,找出一个乘积最大的连续子序列)

     1 int main()
     2 
     3 {
     4 
     5     int a[20],n,s,t,ans=0;
     6 
     7     cin>>n;
     8 
     9     for(int i=0;i<n;i++){
    10 
    11         cin>>a[i];
    12 
    13     }
    14 
    15     for(int i=0;i<n;i++){
    16 
    17         t=a[i];s=a[i];
    18 
    19         for(int j=i+1;j<n;j++){
    20 
    21             s=s*a[j];
    22 
    23             if(t<s) t=s;
    24 
    25         }
    26 
    27         if(t>ans) ans=t;
    28 
    29     }
    30 
    31     if(ans>0) cout<<ans;
    32 
    33     else cout<<-1;
    34 
    35     return 0;
    36 
    37 }
    38 
    39 判断一个数中是否有数字7:
    40 
    41 int f2(int i)
    42 
    43 {
    44 
    45     int t=i;
    46 
    47     while(t>0){
    48 
    49         if(t%10==7) return 1;
    50 
    51         t/=10;
    52 
    53     }
    54 
    55     return 0;
    56 
    57 }
     

    函数模板(判断xyz的大小):

     1 template <typename T> void sort (T x,T y,T z){
     2 
     3     if(x<y){
     4 
     5         if(y<z){
     6 
     7             cout<<x<<" "<<y<<" "<<z<<endl;
     8 
     9         }
    10 
    11         else {
    12 
    13             if(x<z) cout<<x<<" "<<z<<" "<<y<<endl;
    14 
    15             else cout<<z<<" "<<x<<" "<<y<<endl;
    16 
    17         }
    18 
    19     }
    20 
    21     else
    22 
    23     {
    24 
    25         if(x<z)
    26 
    27         cout<<y<<" "<<x<<" "<<z<<endl;
    28 
    29         else
    30 
    31         {
    32 
    33             if(y<z) cout<<y<<" "<<z<<" "<<x<<endl;
    34 
    35             else cout<<z<<" "<<y<<" "<<x<<endl;
    36 
    37         }
    38 
    39     }
    40 
    41 }

    循环移位:

     1 int move(int value,int n)
     2 
     3 {
     4 
     5 if(n==0) return value;
     6 
     7 else if(n<0)
     8 
     9 {
    10 
    11 n=-n;
    12 
    13 value=(value<<n)|(value>>(32-n));
    14 
    15 }
    16 
    17 else value=(value>>n)|(value<<(32-n));
    18 
    19 return value;
    20 
    21 }

    十进制数转换为2进制数:

     1 void zhuaner(int n,int a[]){
     2 
     3    int i;
     4 
     5    for(i=0;n>0;i++){
     6 
     7      a[i]=n%2;
     8 
     9      n=n/2;
    10 
    11    }
    12 
    13    for(i=i-1;i>=0;i--)
    14 
    15    if(i!=0) break;
    16 
    17    for(;i>=0;i--)
    18 
    19    cout<<a[i];
    20 
    21 }

    亲和数(两个数的真约数之和交叉等于这俩个数):

     1 #include <iostream>
     2 
     3 using namespace std;
     4 
     5 int zys(int n){
     6 
     7     int i,s=1;
     8 
     9     for(i=2;i<n;i++){
    10 
    11         if(n%i==0) s=s+i;
    12 
    13     }
    14 
    15     return s;
    16 
    17 }
    18 
    19 int main()
    20 
    21 {
    22 
    23     int A,B;
    24 
    25     cin>>A>>B;
    26 
    27     if(A==zys(B)) cout<<"YES"<<endl;
    28 
    29     else cout<<"NO"<<endl;
    30 
    31     return 0;
    32 
    33 }
     

    阶乘:

     1 int factorial(int n)
     2 
     3 {
     4 
     5     int i=2,s=1;
     6 
     7     while(i<=n){
     8 
     9         s=s*i;i++;
    10 
    11     }
    12 
    13     return s;
    14 
    15 }

    组合数公式:

     1 int combinatorial_number(int m,int n)
     2 
     3 {
     4 
     5     if(m==0) return 1;
     6 
     7     return factorial(n)/factorial(m)/factorial(n-m);
     8 
     9 }
    10 
    11  

    冒泡排序(无标志位):

     1 void BubbleSort(int arr[], int n)
     2 
     3 {
     4 
     5     for (int i = 0; i < n - 1; i++)
     6 
     7    {
     8 
     9             for (int j = 0; j < n - i - 1; j++)
    10 
    11            {
    12 
    13                     if (arr[j] > arr[j + 1])
    14 
    15         {
    16 
    17                             int temp = arr[j];
    18 
    19                             arr[j] = arr[j + 1];
    20 
    21                             arr[j + 1] = temp;
    22 
    23                         }
    24 
    25                  }
    26 
    27          }
    28 
    29 }

    改进冒泡排序(有标志位):

     1 void OptimBubbleSort(int arr[], int n)
     2 
     3 {
     4 
     5    Bool flag = false;//设置一个标志位
     6 
     7     for (int i = 0; i < n - 1; i++)
     8 
     9    {
    10 
    11         Flag = true;
    12 
    13             for (int j = 0; j < n - i - 1; j++)
    14 
    15            {
    16 
    17                     if (arr[j] > arr[j + 1])
    18 
    19         {
    20 
    21                             int temp = arr[j];
    22 
    23                             arr[j] = arr[j + 1];
    24 
    25                             arr[j + 1] = temp;
    26 
    27 flag=false;
    28 
    29                         }
    30 
    31                  }
    32 
    33          }
    34 
    35 }

    二分查找:

     1 int binary_find(int n,int arr[],int m)
     2 
     3 {
     4 
     5     int a=0,b=n-1,i=(a+b)/2;
     6 
     7     while(arr[i]!=m){
     8 
     9         if(m<arr[i]){
    10 
    11             b=i;
    12 
    13             i=(a+b)/2;
    14 
    15         }
    16 
    17         else {
    18 
    19             a=i;
    20 
    21             i=(a+b)/2;
    22 
    23         }
    24 
    25     }
    26 
    27     return i;
    28 
    29 }

    选择排序(正版):

     1 void selectSort(int a[], int len)
     2 
     3 {
     4 
     5  
     6 
     7    int minindex, temp;
     8 
     9    for(int i = 0; i<len-1;i++)
    10 
    11    {
    12 
    13        minindex = i;
    14 
    15        for(int j = i+1; j<len; j++)
    16 
    17      {
    18 
    19          if(a[j]<a[minindex])
    20 
    21            minindex = j;
    22 
    23  
    24 
    25      }
    26 
    27      temp = a[i];
    28 
    29      a[i] = a[minindex];
    30 
    31      a[minindex] = temp;
    32 
    33    }
    34 
    35 }

    选择排序(noj版:从数组A第s个元素起始,连续m个元素升序排序。)

     1 int SectionSort(int A[],int s,int m){
     2 
     3     int i,j,t,k;
     4 
     5     for(i=s;i<s+m;i++){
     6 
     7         k=i;
     8 
     9         for(j=i+1;j<s+m;j++)
    10 
    11         if(A[j]>A[k]) k=j;
    12 
    13         if(i!=k){
    14 
    15             t=A[i];
    16 
    17             A[i]=A[k];
    18 
    19             A[k]=t;
    20 
    21         }
    22 
    23     }
    24 
    25 }

    两两交换之最少次数排序:

     1 int paixu(int a[],int m){
     2 
     3     int i,j,k,t,s=0;
     4 
     5     for(i=1;i<m;i++){
     6 
     7         k=a[i];
     8 
     9         for(j=i-1;j>=0&&k<a[j];j--){
    10 
    11             s++;
    12 
    13             a[j+1]=a[j];
    14 
    15         }
    16 
    17         a[j+1]=k;
    18 
    19     }
    20 
    21     return s;      //函数的返回值是最少的交换次数
    22 
    23 }

    恐怖水母:(改进冒泡排序,最优化)

     1 void OptimBubbleSort(int arr[], int n)
     2 
     3 {
     4 
     5    bool flag = false;//设置一个标志位
     6 
     7     for (int i = 0; i < n - 1; i++)
     8 
     9    {
    10 
    11         flag = true;
    12 
    13             for (int j = 0; j < n - i - 1; j++)
    14 
    15            {
    16 
    17                     if (arr[j] > arr[j + 1])
    18 
    19         {
    20 
    21                             int temp = arr[j];
    22 
    23                             arr[j] = arr[j + 1];
    24 
    25                             arr[j + 1] = temp;
    26 
    27                             flag=false;
    28 
    29                         }
    30 
    31                  }
    32 
    33          }
    34 
    35 }
    36 
    37  
    38 
    39 int main()
    40 
    41 {
    42 
    43  
    44 
    45     int a[100],b[100],n,m,ans=0;
    46 
    47     cin>>n>>m;
    48 
    49     for(int i=0;i<n;i++)
    50 
    51         cin>>a[i];
    52 
    53     for(int i=0;i<m;i++)
    54 
    55         cin>>b[i];
    56 
    57     OptimBubbleSort(a,n);
    58 
    59     OptimBubbleSort(b,m);
    60 
    61     for(int i=0;i<n;i++)
    62 
    63     {
    64 
    65         for(int j=0;j<m;j++)
    66 
    67         {
    68 
    69             if(b[j]>=a[i])
    70 
    71             {
    72 
    73                 ans=ans+b[j];
    74 
    75                 b[j]=0;
    76 
    77                 break;
    78 
    79             }
    80 
    81         }
    82 
    83     }
    84 
    85     cout<<ans<<endl;
    86 
    87     return 0;
    88 
    89 }
     

    右下角(左上角):

     1 int main(){
     2 
     3     int n;
     4 
     5     cin>>n;
     6 
     7     int i,ii,A[100][100];
     8 
     9     for(i=0;i<n;i++){
    10 
    11         for(ii=0;ii<n;ii++){
    12 
    13             cin>>A[i][ii];
    14 
    15         }
    16 
    17     }
    18 
    19     for(i=0;i<n;i++){
    20 
    21         for(ii=0;ii<n;ii++){
    22 
    23             if(ii<=n-2-i) cout<<"  ";
    24 
    25             else cout<<A[i][ii]<<" ";
    26 
    27         }
    28 
    29         cout<<endl;
    30 
    31     }
    32 
    33     return 0;
    34 
    35 }
    36 
    37 int main(){
    38 
    39     int n;
    40 
    41     cin>>n;
    42 
    43     int i,ii,A[100][100];
    44 
    45     for(i=0;i<n;i++){
    46 
    47         for(ii=0;ii<n;ii++){
    48 
    49             cin>>A[i][ii];
    50 
    51         }
    52 
    53     }
    54 
    55     for(i=0;i<n;i++){
    56 
    57         for(ii=0;ii<n;ii++){
    58 
    59             if(ii<=n-1-i) cout<<A[i][ii]<<" ";
    60 
    61             else cout<<"  ";
    62 
    63         }
    64 
    65         cout<<endl;
    66 
    67     }
    68 
    69     return 0;
    70 
    71 }
    72 
    73 -----

    矩阵边芯与内芯之差:

     1 int main(){
     2 
     3     int n,m,s1=0,s2=0;
     4 
     5     cin>>n>>m;
     6 
     7     int i,ii,A[100][100];
     8 
     9     for(i=0;i<n;i++){
    10 
    11         for(ii=0;ii<m;ii++){
    12 
    13             cin>>A[i][ii];
    14 
    15         }
    16 
    17     }
    18 
    19     for(i=0;i<n;i++){
    20 
    21         for(ii=0;ii<m;ii++){
    22 
    23             if((i==0)|(i==n-1)) s1=s1+A[i][ii];
    24 
    25             if(i<n-1&&i>0){
    26 
    27                 if((ii==0)|(ii==m-1)) s1=s1+A[i][ii];
    28 
    29                 else s2=s2+A[i][ii];
    30 
    31             }
    32 
    33         }
    34 
    35     }
    36 
    37     cout<<s1-s2<<endl;
    38 
    39     return 0;
    40 
    41 }
     

    字符串复制:(nojAC  C++版的不给AC,先弄上来吧……)

     1 #include <stdio.h>
     2 
     3 #include <stdlib.h>
     4 
     5  
     6 
     7 int main()
     8 
     9 {
    10 
    11     char A[99];
    12 
    13     int i=0,j,a;
    14 
    15     while((A[i]=getchar())!='
    ')i++;
    16 
    17    scanf("%d",&a);
    18 
    19    for(j=a;j<i;j++)
    20 
    21      printf("%c",A[j]);
    22 
    23    return 0;
    24 
    25 }

    字符串比较:(从第一个开始,返回值是第一个不同字母ASCII码的差值)

     1 int stringcompare(char s1[],char s2[]){
     2 
     3     int i,s=1,a,b;
     4 
     5     for(i=0;s1[i]!=''&&s2[i]!='';i++){
     6 
     7         a=s1[i];
     8 
     9         b=s2[i];
    10 
    11         if(s1[i]!=s2[i]) {s=a-b;break;}
    12 
    13     }
    14 
    15     return s;
    16 
    17 }

    字符串替换:(you are what you do  you替换为we we are what we do)

     1 #include <stdio.h>  //noj AC版
     2 
     3 #include <stdlib.h>
     4 
     5 #include <string.h>
     6 
     7 int main()
     8 
     9 {
    10 
    11     char s[1000],b[1000];
    12 
    13     int i,n,h=0;
    14 
    15     gets(s);
    16 
    17     n=strlen(s);
    18 
    19     for(i=0;i<n;i++){
    20 
    21     if(s[i]==121&&s[i+1]==111&&s[i+2]==117){
    22 
    23         b[h]=119;b[h+1]=101;h=h+2;i=i+2;
    24 
    25     }
    26 
    27     else {
    28 
    29         b[h]=s[i];h++;
    30 
    31     };
    32 
    33     }
    34 
    35     for(i=0;i<h;i++) printf("%c",b[i]);
    36 
    37     return 0;
    38 
    39 }
    40 
    41 #include<iostream>    //理论上可行版
    42 
    43 using namespace std;
    44 
    45 #include<cstring>
    46 
    47 int main()
    48 
    49 {
    50 
    51     string str1;
    52 
    53     getline(cin,str1);
    54 
    55     int pos=str1.find("you");
    56 
    57     while(pos!=-1){
    58 
    59         str1.replace(pos,3,"we");
    60 
    61         pos=str1.find("you");
    62 
    63     }
    64 
    65     cout<<str1;
    66 
    67     return 0;
    68 
    69 }

    分离单词:(编写程序以字符串为单位,以空格或标点符号(字符串中仅含英文逗号,或小数点.作为标点符号)作为分隔符对字符串中的所有单词进行倒排,然后把已经处理的字符串打印出来)

     1 #include <stdio.h>
     2 
     3 #include <stdlib.h>
     4 
     5 #include <string.h>
     6 
     7 int main()
     8 
     9 {
    10 
    11     char s[1000],b[1000][1000];
    12 
    13     int i,n,j,h=0,m;
    14 
    15     gets(s);
    16 
    17     n=strlen(s);
    18 
    19     for(i=0;i<n;i++){
    20 
    21      if((s[i]>64&&s[i]<91)||(s[i]>96&&s[i]<123)){
    22 
    23             m=0;
    24 
    25         for(j=i;;j++) {if((s[j]>64&&s[j]<91)||(s[j]>96&&s[j]<123)) {
    26 
    27             b[h][m]=s[j];m++;i++;
    28 
    29         }
    30 
    31         else {
    32 
    33             b[h][m]=' ';
    34 
    35             h++;
    36 
    37             break;
    38 
    39         }
    40 
    41         }
    42 
    43         h++;
    44 
    45      }
    46 
    47     }
    48 
    49     for(i=h-2;i>=0;i--)
    50 
    51         printf("%s",b[i]);
    52 
    53     return 0;
    54 
    55 }

    字符串排序:(输入十个等长的字符串(每个字符串最多10个字符,对他们进行排序,并打印)

     1 #include <stdio.h>
     2 
     3 #include <stdlib.h>
     4 
     5 #include <string.h>
     6 
     7 int main()
     8 
     9 {
    10 
    11     char s[10][80],b[10][80];
    12 
    13     int i,k,j;
    14 
    15     for(i=0;i<10;i++) scanf("%s",s[i]);
    16 
    17     for(i=0;i<10;i++){
    18 
    19             k=0;
    20 
    21         for(j=0;j<10;j++)
    22 
    23             if (strcmp(s[i],s[j])>0) k++;
    24 
    25         strcpy(b[k],s[i]);}
    26 
    27     for(i=0;i<10;i++) printf("%s ",b[i]);
    28 
    29     return 0;    
    30 
    31 }

    子字符串替换:(将一个长字符串str中凡是与str1相同的字符替换成str2)

     1 #include<iostream> //理论上可行版1
     2 
     3 using namespace std;
     4 
     5 #include<cstring>
     6 
     7 int main()
     8 
     9 {
    10 
    11     string str,str1,str2;
    12 
    13     getline(cin,str);
    14 
    15     getline(cin,str1);
    16 
    17     getline(cin,str2);
    18 
    19     int pos=str.find(str1);
    20 
    21     while(pos!=-1){
    22 
    23         str.replace(pos,str1.length(),str2);
    24 
    25         pos=str.find(str1);
    26 
    27     }
    28 
    29     cout<<str;
    30 
    31     return 0;
    32 
    33 }
    34 
    35 #include<bits/stdc++.h>//理论上可行版2(且noj AC)
    36 
    37 using namespace std;
    38 
    39 int main(){
    40 
    41   string str,str1,str2;
    42 
    43   getline(cin,str);
    44 
    45   cin>>str1>>str2;
    46 
    47   int a,b;
    48 
    49   a=str1.length();
    50 
    51   b=str.length();
    52 
    53   int pos,i=0;
    54 
    55   while(str.find(str1)!=string::npos){
    56 
    57     pos=str.find(str1);
    58 
    59     str.replace(pos,a,str2);
    60 
    61   }
    62 
    63   cout<<str;
    64 
    65   return 0;
    66 
    67 }
     

    分数加减法:

     1 #include<iostream>  //noj AC……就这样吧
     2 
     3 #include <stdio.h>
     4 
     5 #include <stdlib.h>
     6 
     7 using namespace std;
     8 
     9 int main()
    10 
    11 {
    12 
    13     int a,b,c,d,e,f,n,h=0;
    14 
    15     char s;
    16 
    17     scanf("%d/%d%c%d/%d",&a,&b,&s,&c,&d);
    18 
    19     if(s=='+'){
    20 
    21         e=a*d+b*c;
    22 
    23         f=b*d;
    24 
    25         n=f;
    26 
    27         if(e==0) {printf("0");
    28 
    29                   return 0;}
    30 
    31         if(e<0) e=-e,h=1;
    32 
    33         if(f%e==0){
    34 
    35         f=f/e;
    36 
    37         e=e/(f/n);
    38 
    39         }
    40 
    41         if(h==0) printf("%d/%d",e,f);
    42 
    43              else printf("-%d/%d",e,f);
    44 
    45     }
    46 
    47     if(s=='-'){
    48 
    49         e=a*d-b*c;
    50 
    51         f=b*d;
    52 
    53         n=f;
    54 
    55         if(e==0) {printf("0");
    56 
    57                   return 0;}
    58 
    59         if(e<0) e=-e,h=1;
    60 
    61         if(f%e==0){
    62 
    63         f=f/e;
    64 
    65         e=e/(f/n);
    66 
    67         }
    68 
    69         if(h==0) printf("%d/%d",e,f);
    70 
    71              else printf("-%d/%d",e,f);
    72 
    73     }
    74 
    75     return 0;
    76 
    77 }
     

    重组字符串:(将参数s所指的字符串中除了下标为奇数,同时ASCII码也为奇数的字符之外,其余字符都删除,并将重组后的字符串打印出来)

     1 #include <iostream>
     2 
     3 #include<stdio.h>
     4 
     5 using namespace std;
     6 
     7 int b;
     8 
     9 void fun(char *s,char *t){
    10 
    11    int i=0,a;
    12 
    13    for(;s[i]!='';i++)
    14 
    15    for(a=0,b=0;a<i+1;a++){
    16 
    17      if(a%2!=0&&s[i]%2!=0) {t[b]=s[a];b++;}
    18 
    19    }
    20 
    21 }
    22 
    23 int main(){
    24 
    25    char s[100],t[100];
    26 
    27    gets(s);
    28 
    29    fun(s,t);
    30 
    31    for(int i=0;i<=b;i++) cout<<t[i];
    32 
    33    return 0;
    34 
    35 }

    文件比较:(已有两个文本文件(DATA5613.TXT和DATA5613.CPP),请编写程序从这两个文件中读取相应行和列上的字符,如果遇到互不相同的字符,输出他是第几行第几列的字符)

     

     1 #include <stdio.h>
     2 
     3 #include <stdlib.h>
     4 
     5 #include <string.h>
     6 
     7 int main()
     8 
     9 {
    10 
    11     char a[100][1000],b[100][1000];
    12 
    13     FILE *p1,*p2;
    14 
    15     int i=0,j=0,n;
    16 
    17     p1=fopen("DATA5613.TXT","r");
    18 
    19     p2=fopen("DATA5613.CPP","rb");
    20 
    21     while(!feof(p1)){
    22 
    23      if(fgets(a[i],99,p1)==NULL)continue;
    24 
    25      i++;
    26 
    27     }
    28 
    29     i=0;
    30 
    31         while(!feof(p2)){
    32 
    33      if(fgets(b[i],99,p2)==NULL)continue;
    34 
    35      i++;
    36 
    37     }
    38 
    39     n=i;
    40 
    41     for(i=0;i<n;i++)
    42 
    43    for(j=0;j<strlen(a[i])-1;j++) if(a[i][j]!=b[i][j]) {printf("%d %d
    ",i+1,j+1);
    44 
    45                            break;};
    46 
    47     return 0;
    48 
    49 }

    单词频次:

     1 #include<iostream>
     2 
     3 #include <cstdio>
     4 
     5 #include <cstdlib>
     6 
     7 int main()
     8 
     9 {
    10 
    11     char s[1000][1000];
    12 
    13     FILE *p;
    14 
    15     int i,j=0,k=0,h=0,q=0,e;
    16 
    17     p=fopen("DATA5610.TXT","r");
    18 
    19     while(!feof(p)){
    20 
    21      if(fgets(s[q],999,p)==NULL) continue;
    22 
    23      q++;
    24 
    25     }
    26 
    27     e=q;
    28 
    29     for(q=0;q<e;q++)
    30 
    31     for(i=0;i<1000;i++){
    32 
    33      if(s[q][i]=='i'&&s[q][i+1]=='f') h++;
    34 
    35    if(s[q][i]=='w'&&s[q][i+1]=='h'&&s[q][i+2]=='i'&&s[q][i+3]=='l'&&s[q][i+4]=='e')
    36 
    37         j++;
    38 
    39      if(s[q][i]=='f'&&s[q][i+1]=='o'&&s[q][i+2]=='r') k++;
    40 
    41     }
    42 
    43     printf("%d %d %d",h,j,k);
    44 
    45     return 0;
    46 
    47 }

    检查文件格式:

     

     1 #include<iostream>
     2 
     3 #include <stdio.h>
     4 
     5 #include <stdlib.h>
     6 
     7 #include <string.h>
     8 
     9 int main(int argc, char *argv[])
    10 
    11 {
    12 
    13     FILE *fp = fopen("DATA5609.DAT", "rb");
    14 
    15     if (fp==NULL)return -1;
    16 
    17     char buf[11] = "";
    18 
    19     fread(buf, sizeof(buf),1,fp);
    20 
    21     if (strncmp("JFIF",buf+6,strlen("JFIF"))==0){
    22 
    23         printf("JPEG");
    24 
    25     }
    26 
    27     else if (strncmp("GIF89a",buf,strlen("GIF89a"))==0){
    28 
    29         printf("GIF");
    30 
    31     }
    32 
    33         else if (strncmp("PNG",buf+1,strlen("PNG"))==0){
    34 
    35         printf("PNG");
    36 
    37     }
    38 
    39             else{
    40 
    41         printf("UNKNOW");
    42 
    43     }
    44 
    45     return 0;
    46 
    47 }

    检测位图长宽:

     

     1 #include<iostream>
     2 
     3 #include <cstdio>
     4 
     5 #include <cstdlib>
     6 
     7 int main()
     8 
     9 {
    10 
    11     FILE *p;
    12 
    13     long biWidth,biHeight;
    14 
    15     p=fopen("DATA5611.BMP","rb");
    16 
    17     if(p!=NULL)
    18 
    19    {
    20 
    21      fseek(p,18,SEEK_SET);
    22 
    23      fread(&biWidth,sizeof(long),1,p);
    24 
    25      fread(&biHeight,sizeof(long),1,p);
    26 
    27      printf("%ld %ld",biWidth,biHeight);
    28 
    29      fclose(p);
    30 
    31    }
    32 
    33    return 0;
    34 
    35 }
     

    symmetric sort:

    描述在东大管理公司(DongDa Management Inc.,没错,它是由一群小丑运营的)工作时,你刚写完一个程序,它的输出是一个按长度排序的名字列表(因此每个名字至少与前一个名字一样长)。但是,您的老板不喜欢输出的方式,而是希望输出看起来更对称,更短的字符串在顶部和底部,更长的字符串在中间。他的规则是,每对名字都在列表的两端,而第一个名字总是在列表的顶部。在下面的例子中,Bo和Pat是第一对,lean和Kevin是第二对,等等。输入输入由一组字符串组成,每组从一行开始,其中包含一个整数n, n是该集合中的字符串数,后面跟着n个未排序的字符串。没有字符串包含空格。每组至少有一个不超过15个字符串。每个字符串最长不超过25个字符。输出对于每个输入集,输出集如示例输出所示。,若两个字符串长度相等,则按原顺序排列。

     1 #include<iostream>  //二维字符数组的应用
     2 
     3 #include <stdio.h>
     4 
     5 #include <stdlib.h>
     6 
     7 #include <string.h>
     8 
     9 int main()
    10 
    11 {
    12 
    13     char s[100][100],a[100];
    14 
    15     int i,j,n;
    16 
    17     scanf("%d",&n);
    18 
    19     for(i=0;i<n;i++) scanf("%s",s[i]);
    20 
    21     for(i=0;i<n-1;i++)
    22 
    23         for(j=0;j<n-1-i;j++)
    24 
    25            if(strlen(s[i])>strlen(s[i+1])) strcpy(a,s[i]),strcpy(s[i],s[i+1]),strcpy(s[i+1],a);
    26 
    27     if(n%2==0){
    28 
    29     for(i=0;i<n-1;i=i+2) printf("%s ",s[i]);
    30 
    31     printf("%s ",s[n-1]);
    32 
    33     for(i=i-3;i>0;i=i-2) printf("%s ",s[i]);
    34 
    35     }
    36 
    37     else{
    38 
    39     for(i=0;i<n-1;i=i+2) printf("%s ",s[i]);
    40 
    41     printf("%s ",s[n-1]);
    42 
    43     for(i=i-1;i>0;i=i-2) printf("%s ",s[i]);
    44 
    45     }
    46 
    47     return 0;
    48 
    49 }

    大数:

    大数除法:

      1 #include<iostream>
      2 
      3 #include <stdio.h>
      4 
      5 #include <string.h>
      6 
      7 using namespace std;
      8 
      9 #define maxx 1025
     10 
     11  
     12 
     13 void chu(char *str1, char *str2, char *str3)
     14 
     15 {
     16 
     17  int i1, i2, i, j, jj, tag, carry, cf, c[maxx];
     18 
     19  int len1 = strlen(str1), len2 = strlen(str2), lend;
     20 
     21  char d[maxx];
     22 
     23  memset(c, 0, sizeof(c));
     24 
     25  memcpy(d, str1, len2);
     26 
     27  lend = len2; j = 0;
     28 
     29  for( i1=len2-1; i1 < len1; ++i1 )
     30 
     31  {
     32 
     33   if( lend < len2 )
     34 
     35   {
     36 
     37    d[lend] = str1[i1+1]; c[j] = 0;
     38 
     39    ++j; ++lend;
     40 
     41   }
     42 
     43   else
     44 
     45   if( lend == len2 )
     46 
     47   {
     48 
     49    jj = 1;
     50 
     51    for( i=0; i < lend; ++i )
     52 
     53    {
     54 
     55     if( d[i] > str2[i] ) break;
     56 
     57     else if( d[i] < str2[i] )
     58 
     59     {
     60 
     61      jj = 0; break;
     62 
     63     }
     64 
     65    }
     66 
     67    if( jj == 0 )
     68 
     69    {
     70 
     71     d[lend] = str1[i1+1]; c[j] = 0;
     72 
     73     ++j; ++lend;
     74 
     75     continue;
     76 
     77    }
     78 
     79   }
     80 
     81   if( jj==1 || lend > len2 )
     82 
     83   {
     84 
     85    cf = jj=0;
     86 
     87    while( d[jj] <= '0' && jj < lend ) ++jj;
     88 
     89    if( lend-jj > len2 ) cf = 1;
     90 
     91    else
     92 
     93    if( lend-jj < len2 ) cf = 0;
     94 
     95    else
     96 
     97    {
     98 
     99     i2 = 0; cf = 1;
    100 
    101     for( i=jj; i < lend; ++i )
    102 
    103     {
    104 
    105      if( d[i] < str2[i2] )
    106 
    107      {
    108 
    109       cf = 0; break;
    110 
    111      }
    112 
    113      else if( d[i] > str2[i2] )
    114 
    115      {
    116 
    117       break;
    118 
    119      }
    120 
    121      ++i2;
    122 
    123     }
    124 
    125    }
    126 
    127    while( cf )
    128 
    129    {
    130 
    131     i2 = len2-1; cf = 0;
    132 
    133     for( i=lend-1; i >= lend-len2; --i )
    134 
    135     {
    136 
    137      d[i] = d[i]-str2[i2]+'0';
    138 
    139      if( d[i] < '0' )
    140 
    141      {
    142 
    143       d[i] = d[i]+10; carry = 1;
    144 
    145       --d[i-1];
    146 
    147      }
    148 
    149      else carry = 0;
    150 
    151      --i2;
    152 
    153     }
    154 
    155     ++c[j]; jj=0;
    156 
    157     while( d[jj] <= '0' && jj < lend ) ++jj;
    158 
    159     if( lend-jj > len2 ) cf = 1;
    160 
    161     else
    162 
    163     if( lend-jj < len2 ) cf = 0;
    164 
    165     else
    166 
    167     {
    168 
    169      i2 = 0; cf = 1;
    170 
    171      for( i=jj; i < lend; ++i )
    172 
    173      {
    174 
    175       if( d[i] < str2[i2] )
    176 
    177       {
    178 
    179        cf = 0; break;
    180 
    181       }
    182 
    183       else if( d[i] > str2[i2] )
    184 
    185       {
    186 
    187        break;
    188 
    189       }
    190 
    191       ++i2;
    192 
    193      }
    194 
    195     }
    196 
    197    }
    198 
    199    jj = 0;
    200 
    201    while( d[jj] <= '0' && jj < lend ) ++jj;
    202 
    203    for( i=0;i < lend-jj; ++i ) d[i] = d[i+jj];
    204 
    205    d[i] = str1[i1+1]; lend = i+1;
    206 
    207    ++j;
    208 
    209   }
    210 
    211  }
    212 
    213  i = tag = 0;
    214 
    215  while( c[i] == 0 ) ++i;
    216 
    217  for( ; i < j; ++i, ++tag ) str3[tag] = c[i]+'0';
    218 
    219  str3[tag] = '';
    220 
    221 }
    222 
    223  
    224 
    225 int main()
    226 
    227 {
    228 
    229  char a[110], b[110], c[110];
    230 
    231  gets(a);gets(b);
    232 
    233  if(a[0]=='-'&&b[0]!='-') printf("-");
    234 
    235  if(b[0]=='-'&&a[0]!='-') printf("-");
    236 
    237  chu( a, b, c );
    238 
    239  printf( "%s
    ", c );
    240 
    241  return 0;
    242 
    243 }

    大数减法:

      1 #include<bits/stdc++.h>
      2 
      3 using namespace std;
      4 
      5 void jian(int st1[],int st2[],int len);
      6 
      7 int st1[100]={0},st2[100]={0},st3[100]={0};
      8 
      9 int a,b,c=0,i,j,k;
     10 
     11 int main(){
     12 
     13     string str1,str2,str3;
     14 
     15     getline(cin,str1);
     16 
     17     getline(cin,str2);
     18 
     19     a=str1.length();
     20 
     21     b=str2.length();
     22 
     23     for(i=a-1,j=0;i>=0;i--){
     24 
     25         st1[j]=str1[i]-'0';j++;
     26 
     27     }
     28 
     29     for(i=b-1,j=0;i>=0;i--){
     30 
     31         st2[j]=str2[i]-'0';j++;
     32 
     33     }
     34 
     35     if(a>b){
     36 
     37         jian(st1,st2,a);
     38 
     39     }
     40 
     41     if(b>a){
     42 
     43         cout<<"-";
     44 
     45         jian(st2,st1,b);
     46 
     47     }
     48 
     49     if(a==b){
     50 
     51         for(i=a-1;i>=0;i--){
     52 
     53             if(st1[i]==st2[i]) continue;
     54 
     55             if(st1[i]>st2[i]) {
     56 
     57                 jian(st1,st2,a);break;
     58 
     59             }
     60 
     61             if(st2[i]>st1[i]){
     62 
     63                 cout<<"-";
     64 
     65                 jian(st2,st1,a);break;
     66 
     67             }
     68 
     69         }
     70 
     71     }
     72 
     73 }
     74 
     75 void jian(int st1[],int st2[],int a){
     76 
     77     for(i=0;i<a;i++){
     78 
     79         if(st1[i]>=st2[i]) st3[i]=st1[i]-st2[i];
     80 
     81         else{
     82 
     83             st3[i]=st1[i]+10-st2[i];
     84 
     85             st1[i+1]--;
     86 
     87         }
     88 
     89     }
     90 
     91     for(i=a-1;i>=0;i--){
     92 
     93         if(st3[i]!=0) break;
     94 
     95     }
     96 
     97     for(;i>=0;i--){
     98 
     99         cout<<st3[i];
    100 
    101     }
    102 
    103 }

    大数加法:

     1 #include<bits/stdc++.h>
     2 
     3 using namespace std;
     4 
     5 int max(int a,int b);
     6 
     7 int main(){
     8 
     9     string str1,str2,str3;
    10 
    11     getline(cin,str1);
    12 
    13     getline(cin,str2);
    14 
    15     int a,b,c=0,i,j,k;
    16 
    17     a=str1.length();
    18 
    19     b=str2.length();
    20 
    21     int st1[100]={0},st2[100]={0},st3[100]={0};
    22 
    23     for(i=a-1,j=0;i>=0;i--){
    24 
    25         st1[j]=str1[i]-'0';j++;
    26 
    27     }
    28 
    29     for(i=b-1,j=0;i>=0;i--){
    30 
    31         st2[j]=str2[i]-'0';j++;
    32 
    33     }
    34 
    35     for(i=0;i<max(a,b);i++){
    36 
    37         st3[i]=st2[i]+st1[i]+c;
    38 
    39         c=0;
    40 
    41         if(st3[i]>9){
    42 
    43             c=st3[i]/10;
    44 
    45             st3[i]%=10;
    46 
    47         }
    48 
    49     }
    50 
    51     for(i=(max(a,b)-1);i>=0;i--){
    52 
    53         cout<<st3[i];
    54 
    55     }
    56 
    57     return 0;
    58 
    59 }
    60 
    61 int max(int a,int b){
    62 
    63     int m;
    64 
    65     m= a>b? a:b;
    66 
    67     return m;
    68 
    69 }

    大数乘法:

     1 #include <stdio.h>
     2 
     3 #include <string.h>
     4 
     5 #include <stdlib.h>
     6 
     7 void cheng(char a[],char b[])
     8 
     9 {
    10 
    11  int i,j,ca,cb,*s;
    12 
    13     ca=strlen(a);
    14 
    15     cb=strlen(b);
    16 
    17     s=(int *)malloc(sizeof(int)*(ca+cb));
    18 
    19     for (i=0;i<ca+cb;i++) s[i]=0;
    20 
    21     for (i=0;i<ca;i++)
    22 
    23         for (j=0;j<cb;j++)
    24 
    25             s[i+j+1]+=(a[i]-'0')*(b[j]-'0');
    26 
    27  
    28 
    29     for (i=ca+cb-1;i>=0;i--)
    30 
    31         if (s[i]>=10)
    32 
    33         {
    34 
    35             s[i-1]+=s[i]/10;
    36 
    37             s[i]%=10;
    38 
    39         }
    40 
    41     i=0;
    42 
    43  while(s[i]==0) i++;
    44 
    45  for (;i<ca+cb;i++) printf("%d",s[i]);
    46 
    47     printf("
    ");
    48 
    49     free(s);
    50 
    51 }
    52 
    53 int main()
    54 
    55 {
    56 
    57  char a[100],b[100];
    58 
    59  gets(a),gets(b);
    60 
    61  if(a[0]=='-'&&b[0]!='-')
    62 
    63  {
    64 
    65   printf("-");
    66 
    67   cheng(&a[1],b);
    68 
    69  }
    70 
    71  else if(a[0]=='-'&&b[0]=='-')
    72 
    73  {
    74 
    75   cheng(&a[1],&b[1]);
    76 
    77  }
    78 
    79  else if(a[0]!='-'&&b[0]=='-')
    80 
    81  {
    82 
    83   printf("-");
    84 
    85   cheng(a,&b[1]);
    86 
    87  }
    88 
    89  else
    90 
    91   cheng(a,b);
    92 
    93  return 0;
    94 
    95 }

    大数乘幂:

     1 #include<iostream>
     2 #include <stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 using namespace std;
     6 int main()
     7 {
     8     char a[10];
     9     int n,b=0,c[250]={0},i,j,x,flag=0;
    10     c[249]=1;
    11     cin>>a>>n;
    12     for(i=0;a[i]!='';i++)
    13     {
    14         if(a[i]=='.')
    15         {
    16             x=i;
    17             flag=1;
    18             continue;
    19         }
    20         b=b*10+a[i]-'0';
    21     }
    22     x=i-x-1;
    23     for(i=1;i<n+1;i++)
    24     {
    25        for(j=0;j<250;j++)
    26            c[j]*=b;
    27        for(j=249;j>=0;j--)
    28        if(c[j]>=10)
    29        {
    30            c[j-1]+=c[j]/10;
    31            c[j]%=10;
    32        }
    33     }
    34     if(flag==0)
    35     {
    36         for(i=0;c[i]==0;i++);
    37         for(;i<250;i++)
    38             cout<<c[i];
    39     }
    40     else if(a[0]=='0')
    41     {
    42         flag=0;
    43         cout<<"0";
    44         for(j=i;j<250;j++)
    45             if(c[j]!=0)
    46             {
    47                 flag=1;
    48                 break;
    49             }
    50         if(flag==1)
    51         {
    52             cout<<".";
    53             for(j=249;c[j]==0&&j>=i;j--);
    54             for(i=250-n*x;i<=j;i++)
    55                 cout<<c[i];
    56         }
    57     }
    58     else
    59     {
    60         flag=0;
    61         for(i=0;c[i]==0;i++);
    62         for(;i<250-n*x;i++)
    63             cout<<c[i];
    64         for(j=i;j<250;j++)
    65             if(c[j]!=0)
    66             {
    67                 flag=1;
    68                 break;
    69             }
    70         if(flag==1)
    71         {
    72             cout<<".";
    73             for(j=249;c[j]==0&&j>=i;j--);
    74             for(;i<=j;i++)
    75                 cout<<c[i];
    76         }
    77 
    78     }
    79     return 0;
    80 }
  • 相关阅读:
    cookie和session区别
    jsp编写页面时常见错误提示
    web处理jsp文件的三个阶段
    JSP页面元素
    B/S与C/S区别
    url组成部分
    css选择器
    ol,ul,dl,table标签的基本语法
    剑指offer-把二叉树打印成多行
    剑指offer-从上往下打印二叉树
  • 原文地址:https://www.cnblogs.com/Aoke/p/12079971.html
Copyright © 2020-2023  润新知