zoukankan      html  css  js  c++  java
  • 东华大学计算机软件工程复试 进阶练习

    1、求长方形的面积和周长

    #include <stdio.h>
    int main()
    {
        int a,b;
        while(~scanf("%d%d",&a,&b))
        {
            printf("%d %d
    ",a*b,2*(a+b));
        }
        return 0;
    }

    2、数列和

    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int sum=0;
            for(int i=1;i<=n;i++)
                sum+=i;
            printf("%d
    ",sum);
        }
        return 0;
    }

    3、解方程

    #include <stdio.h>
    int main()
    {
        double x;
        int a,b;
        while(~scanf("%d%d",&a,&b))
        {
            x=(double)(5-3*b)/(double)(2*a);
            printf("%.1f
    ",x);
        }
        return 0;
    }

    4、一个月的天数

    #include <stdio.h>
    //            1  2  3  4  5  6  7  8  9  10  11  12
    //  闰年366   31 29 31 30 31 30 31 31 30 31  30  31  year%400==0||(year%4==0&&year%100!=0)
    //非闰年365   31 28 31 30 31 30 31 31 30 31  30  31
    int main()
    {
        int year,month;
        scanf("%d%d",&year,&month);
        int flag=0;
        if(year%400==0||(year%4==0&&year%100!=0))flag=1;
        int days;
        switch(month)
        {
            case 4:
            case 6:
            case 9:
            case 11:days=30;break;
            case 2:days=flag?29:28;break;
            default:days=31;break;
        }
        printf("%d
    ",days);
       return 0; }

    5、银行存款到期日

    #include <stdio.h>
    int fun(int year,int month)
    {
        int flag=0;
        if(year%400==0||(year%4==0&&year%100!=0))flag=1;
        int days;
        switch(month)
        {
            case 4:
            case 6:
            case 9:
            case 11:days=30;break;
            case 2:days=flag?29:28;break;
            default:days=31;break;
        }
        return days;
    }
    int main()
    {
        int year,month,day,time;
        scanf("%d%d%d%d",&year,&month,&day,&time);
        year+=time/12;
        month+=time%12;
        if(month>12)
        year+=month/12,month=month%12;
        int temp=fun(year,month);
        if(temp<day)day=temp;
        printf("%d %d %d
    ",year,month,day);
        return 0;
    }

    6、实数运算

    #include <stdio.h>
    int main()
    {
        double a,b;
        char c;
        scanf("%lf%lf",&a,&b);
        getchar();
        scanf("%c",&c);
        if(c=='+')printf("%.1f
    ",a+b);
        else if(c=='-')printf("%.1f
    ",a-b);
        else if(c=='*')printf("%.1f
    ",a*b);
        else
        {
            if(b==0)printf("Wrong!
    ");
            else    printf("%.1f
    ",a/b);
        }
        return 0;
    }

    7、解二次方程

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        double a,b,c;
        scanf("%lf%lf%lf",&a,&b,&c);
        double result1,result2;
        result1=(-b-sqrt(b*b-4*a*c))/(2*a);
        result2=(-b+sqrt(b*b-4*a*c))/(2*a);
        printf("%.2f %.2f
    ",result2,result1);
        return 0;
    }

    8、求第几天

    #include <stdio.h>
    int main()
    {
        int year,month,day;
        scanf("%d%d%d",&year,&month,&day);
        int flag=0,i;
        if(year%400==0||(year%4==0&&year%100!=0))flag=1;
        int days[12]={0};
        for(i=1;i<=12;i++)
        {
            if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
                days[i-1]=31;
            else if(i==4||i==6||i==9||i==11)days[i-1]=30;
            else days[1]=flag?29:28;
        }
        int re=0;
        for(i=1;i<month;i++)re+=days[i-1];
        re+=day;
        printf("%d
    ",re);
        return 0;
    }

    9、求阶乘结果0的个数

    //计算各乘数中因子5的个数即可。
    #include <stdio.h>
    int main()
    {
        int num,count,i,temp;
        while(~scanf("%d",&num))
        {
            count=0;
            for(i=1;i<=num;i++)
            {
                temp=i;    //这里注意
                while(temp%5==0)
                {
                    count++;
                    temp/=5;
                }
            }
            printf("%d
    ",count);
        }
        return 0;
    }

    10、怪数

    #include <stdio.h>
    int isOdd(int num)
    {
        int re=0,i;
        for(i=1;i<num;i++)if(num%i==0)re+=i;
        if(re==num)return 1;
        else return 0;
    }
    int main()
    {
        int num,i;
        scanf("%d",&num);
        for(i=2;i<=num;i++)if(isOdd(i))printf("%d
    ",i);
        return 0;
    }

    11、abc数字

    #include <stdio.h>
    int main()
    {
        int a,b,c;
        while(~scanf("%d%d%d",&a,&b,&c))
        {
            int x=a*100+b*10+c;
            int y=c*100+b*10+a;
            int re=x*y;
            int count=0,temp=re,t;
            while(temp)
            {
                t=temp%10;
                if(t==a||t==b||t==c)count++;
                temp/=10;
            }
            printf("%d %d
    ",re,count);
        }
        return 0;
    }

    12、奇妙的比值

    #include <stdio.h>
    double fun(int num)
    {
        int re=0,i;
        for(i=1;i<=num;i++)
            if(num%i==0)re+=i;
        return (double)re/(double)num;
    }
    int main()
    {
        int num;
        while(~scanf("%d",&num))
            printf("%.2f
    ",fun(num));
        return 0;
    }

    13、t的倍数n

    #include <stdio.h>
    #include <math.h>
    __int64 fun(int num)
    {
        if(num==1) return 7;
        int r=1;
        __int64 i,a,b;
        for(i=1;i<=100000;i++)
        {
            if(i>=pow(10,r))r++;
            a=i*10+7;
            b=7*pow(10,r)+i;
            if(b==a*num)return a;
        }
        return -1;
    }
    int main()
    {
        int num;
        while(~scanf("%d",&num))
        {
            if(fun(num)==-1)printf("No
    ");
            else printf("%I64d
    ",fun(num));
        }
        return 0;
    }

    14、黑色星期五

    #include <stdio.h>
    int fun(int year,int month)
    {
        int flag=0;
        if(year%400==0||(year%4==0&&year%100!=0))flag=1;
        int days;
        switch(month)
        {
            case 4:
            case 6:
            case 9:
            case 11:days=30;break;
            case 2:days=flag?29:28;break;
            default:days=31;break;
        }
        return days;
    }
    int main()
    {
        int n,i;
        scanf("%d",&n);
        int count[7]={0};
        int year=1900,month,total_day=14;
        while(year<=1900+n-1)
        {
            month=1;
            while(month<=12)
            {
                count[total_day%7]++;
                //printf("%d %d %d %d
    ",year,month,total_day,total_day%7);
                total_day+=fun(year,month);
                month++;
            }
            year++;
        }
        for(i=0;i<6;i++)printf("%d ",count[i]);printf("%d
    ",count[i]);
        return 0;
    }

    15、三角形

    #include <stdio.h>
    int main()
    {
        int a,b,i,j;
        while(~scanf("%d%d",&a,&b))
        {
            for(i=1;i<=b;i++)
            {
                for(j=1;j<=i-1;j++)
                {
                    printf("%d ",a);
                    a++;
                    if(a==10)a=1;
                }
                printf("%d
    ",a);
                a++;
                if(a==10)a=1;
            }
        }
        return 0;
    }

    16、数字串处理

    #include <stdio.h>
    #include <malloc.h>
    int main()
    {
        int n,i;
        while(~scanf("%d",&n))
        {
            int* a=(int*)malloc(sizeof(int)*n);
            for(i=0;i<n;i++)scanf("%d",&a[i]);
            int res_count=1,res=a[0],cur,cur_count=0;
            for(i=1;i<n;i++)
            {
                if(a[i]==a[i-1])
                {
                    if(cur_count!=0){cur_count++;if(cur_count>res_count)res_count=cur_count,res=cur;}
                    else res_count++;
                }
                else
                {
                    cur=a[i];
                    cur_count=1;
                }
            }
            printf("%d %d
    ",res,res_count);
        }
        return 0;
    }

    17、公式求解

    #include <stdio.h>
    int main()
    {
        int a,b,x,y;
        while(~scanf("%d%d",&a,&b))
        {
            if(a==0&&b==0)break;
            for(x=1;x<=100;x++)
            {
                for(y=1;y<=100;y++)
                {
                    if((x*x+a*a)==(y*y+b*b))
                        printf("%d %d
    ",x,y);
                }
            }
            printf("
    ");
        }
        return 0;
    }

    18、累加式

    #include <stdio.h>
    int main()
    {
        int n,i;
        while(~scanf("%d",&n))
        {
            i=1;
            if(n==1)printf("1
    ");
            else printf("1");
            while(i<n)
                printf("+%d",++i);
            while(i>2)
                printf("+%d",--i);
            if(n!=1)printf("+1
    ");
        }
        return 0;
    }

    19、约瑟夫环

    #include <stdio.h>
    #include <string.h>
    //用数组模拟环 取出后置-1 时间复杂度n*n 
    //会超时
    int main()
    {
        int a[20];
        int n,m,i,index,count_n,count_m,flag;
        while(~scanf("%d",&n))
        {
            //m从n+1开始取值
            for(m=n+1;;m++)
            {
                for(i=2*n-1;i>=0;i--)a[i]=i+1;
                flag=0;//是否选到了普通人
                count_n=0;
                count_m=0;
                index=-1;
                while(count_n!=n)//当淘汰完所有绑匪停止
                {
                    while(count_m!=m)//当数m个人时停止
                    {
                        index=(index+1)%(2*n);
                        if(a[index]!=-1)count_m++;
                    }
                    if(a[index]<=n){flag=1;break;printf("淘汰%d
    ",m);}//选到了普通人
                    count_n++;
                    //淘汰1个人
                    a[index]=-1;
                    count_m=0;
                }
                if(!flag)//找到了m
                {
                    printf("%d
    ",m);
                    break;
                }
            }
        }
        return 0;
    }
    #include <stdio.h>
    int main()
    {
        int n;
            int num[10]={0,2,7,5,30,169,441,1872,7632,1740,93313};
        while (scanf("%d", &n) != EOF)
        {
              printf("%d
    ",num[n]);
        }
        return 0;
    }

    20、整除的尾数

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        int n,i,size;
        __int64 a,b,temp;
        int res[20];
        while(~scanf("%d",&n))
        {
            while(n--)
            {
                scanf("%I64d%I64d",&a,&b);
                size=0;
                for(i=0;i<100;i++)
                {
                    temp=a*100+i;
                    if(temp%b==0)res[size++]=i;
                }
                for(i=0;i<size-1;i++)printf("%d ",res[i]);if(size>0)printf("%d
    ",res[i]);
            }
        }
        return 0;
    }

    21、回文质数

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    int isPrimeNumber(__int64 n)
    {
        if(n==1)return 0;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    }
    int isPlalindrome(char* str)
    {
        int size=strlen(str);
        int i=0,j=size-1;
        while(i<j)
        {
            if(str[i]!=str[j]) return 0;
            i++,j--;
        }
        return 1;
    }
    int main()
    {
        char str[7];
        __int64 a,b,i;
        scanf("%I64d%I64d",&a,&b);
        for(i=a;i<=b;i++)
        {
            itoa(i,str,10);
            if(isPlalindrome(&str[0])&&isPrimeNumber(i))printf("%I64d
    ",i);
        }
        return 0;
    }

    22、汽水瓶

    #include <stdio.h>
    int main()
    {
        int n;
        while(1)
        {
            scanf("%d",&n);
            if(n==0)break;
            printf("%d
    ",n/2);
        }
        return 0;
    }

    23、阶乘最后的非零位

    #include <stdio.h>
    //http://www.docin.com/p-328958091.html
    //https://www.cnblogs.com/cshg/p/5762316.html
    //每次只保留 非零的最后一位 这种想法是错误的 比如14!最右一位是2 ;15!最右一位是8;而2*15=30得到的结果为3
    
    //找到阶乘中因数为factor的个数 若p是质数
    //result=[n/p]+[n/p^2]+[n/p^3]+....+[n/p^k]
    int GetFactorNumber(int Number, int Factor) {
        int result = 0;
        if(Factor < 2 || Number < 1)
            return -1;
        while(Number >= Factor)
            result += Number /= Factor;
        return result;
    }
    
    int GetLastDigit(int Number) {
        int result = 1;
        int i;
        int tmp;
        int Count = 0;
        int TotalFactors = GetFactorNumber(Number, 5);//Number!阶乘中5的个数
        for(i = Number; i >= 1; i--) {
            tmp = i;
            while(tmp % 2 == 0 && Count < TotalFactors) {//去除TotalFactors个2
                tmp /= 2;
                Count++;
            }
            while(tmp % 5 == 0)//去除TotalFactors个5
                tmp /= 5;
            result *= tmp;//与结果相乘
            result %= 10;//结果只保留个位数
        }
        return result;
    }
    int main() {
        int n;
        scanf("%d", &n);
        printf("%d
    ", GetLastDigit(n));
        return 0;
    }

     24、算菜价

    #include <stdio.h>
    int main() {
        int n;
        int num;
        char name[10];
        double a,b,res;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&num);
            res=0;
            while(num--)
            {
                scanf("%s",&name);getchar();
                scanf("%lf%lf",&a,&b);
                res+=a*b;
            }
            res=(int)(res*10+0.5)/10.0;//小数点后二位 四舍五入
            printf("%.1f
    ",res);
        }
        return 0;
    }

    25、繁殖问题

    #include <stdio.h>
    /*
    #1 1
    #2 1
    #3 =#2+#1=2
    #4 =#3+#2=3
    #5 =#4+#3=5
    #6 =#5+(#4-#1)=5+3-1=7
    #7 =#(7-1)天前的小数死亡 更新存活的数量
       =#6+(#5-#2)=6+4-0=10
    #n =#(n-1)       + (#(n-2)-#(n-5))
        上个月的个数 + 已经可以繁殖的个数
    10+7-2-1
    */
    int main() {
        __int64 num[51]={0};//模拟每月存活的数量 动态变化
        __int64 res[51]={0};//每月的结果
        num[1]=num[2]=1;num[3]=2;num[4]=3;num[5]=5;num[6]=7;num[7]=10;
        res[1]=res[2]=1;res[3]=2;res[4]=3;res[5]=5;res[6]=7;res[7]=10;
        int i,temp;
        for(i=7;i<=50;i++)
        {
            temp=i-1;
            while(temp)num[temp--]-=num[i-6];//死亡
            res[i]=num[i-1]+num[i-2]-num[i-5];
            num[i]=res[i];
        }
        int n;
        while(~scanf("%d",&n))
        {
            printf("%I64d
    ",res[n]);
        }
        return 0;
    }

    26、树

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    int main() {
        int len,num,a,b,i;
        while(~scanf("%d%d",&len,&num))
        {
            len++;
            int *tree=(int*)malloc(sizeof(int)*len);
            //注意不是字符数组时 要写sizeof(int)*len
            memset(tree,0,sizeof(int)*len);
            while(num--)
            {
                scanf("%d%d",&a,&b);
                for(i=a;i<=b;i++)
                    if(tree[i]==0)len--,tree[i]=1;
            }
            printf("%d
    ",len);
        }
        return 0;
    }

    27、约瑟夫环

    #include <stdio.h>
    #include <string.h>
    //用数组模拟环 取出后置-1 时间复杂度n*n
    int main()
    {
        int a[100];
        int n,m,i,index,count_n,count_m;
        while(~scanf("%d%d",&n,&m))
        {
            count_n=0;
            count_m=0;
            index=-1;
            for(i=n-1;i>=0;i--)a[i]=i+1;
            while(count_n!=n)//当淘汰完所有人停止
            {
                while(count_m!=m)//当数m个人时停止
                {
                    index=(index+1)%n;
                    if(a[index]!=-1)count_m++;
                }
                count_n++;
                //淘汰第1个人
                if(count_n==n)printf("%d
    ",a[index]);//最后一个
                else printf("%d ",a[index]);
                a[index]=-1;
                count_m=0;
            }
        }
    }

    28、最大与最小

    #include <stdio.h>
    #include <malloc.h>
    int getLenSum(int* arr,int size,int len,int start)
    {
        int res=0;
        while(len--)
        {
            res+=arr[(start++)%size];
        }
        return res;
    }
    int main() {
        int size,len,i,max,min,temp;
        while(~scanf("%d%d",&size,&len))
        {
            int *arr=(int*)malloc(sizeof(int)*size);
            for(i=0;i<size;i++)scanf("%d",&arr[i]);
            max=getLenSum(arr,size,len,0);
            min=max;
            for(i=1;i<size;i++)
            {
                temp=getLenSum(arr,size,len,i);
                max=max>=temp?max:temp;
                min=min<=temp?min:temp;
            }
            printf("Max=%d
    ",max);
            printf("Min=%d
    
    ",min);
        }
        return 0;
    }

    29、环

    #include <stdio.h>
    int fun(int* arr,int index)
    {
        int len=9,i=index;
        __int64 a=0,b=0,temp;
        while(len){a=a*10+arr[(i++)%9];len--;}
        len=9;
        i=index-1;
        while(len){if(i==-1)i=8;b=b*10+arr[i--];len--;}
        if(a<b){temp=a;a=b;b=temp;}
        if((a-b)%396==0)return 1;
        else return 0;
    }
    int main() {
        int n,i,count;
        int arr[9];
        scanf("%d",&n);
        while(n--)
        {
            count=0;
            for(i=0;i<9;i++)scanf("%d",&arr[i]);
            for(i=0;i<9;i++)if(fun(arr,i))count++;
            printf("%d
    ",count);
        }
        return 0;
    }

    30、求数列项

    #include <stdio.h>
    int main() {
        int arr[51];
        int i,n;
        arr[1]=1;arr[2]=5;
        for(i=3;i<=50;i++)
            arr[i]=arr[i-1]+(i-3)*3+7;
        while(~scanf("%d",&n))
            printf("%d
    ",arr[n]);
        return 0;
    }

    31、最高频率

    #include <stdio.h>
    #include <string.h>
    int main() {
        int i,size,temp,res;
        int arr[110];
        while(~scanf("%d",&size))
        {
            res=1;
            memset(arr,0,sizeof(int)*110);
            for(i=0;i<size;i++){scanf("%d",&temp);arr[temp]++;}
            for(i=2;i<110;i++)if(arr[i]>arr[res])res=i;
            printf("%d
    ",res);
        }
    return 0; }

    32、三艘船

    #include <stdio.h>
    //找出速度最快的那个船 然后遍历答案
    int main() {
        int t[3],v[3];
        int max_vi,i,temp,s,time;
        while(~scanf("%d%d%d",&t[0],&t[1],&t[2]))
        {
            scanf("%d%d%d",&v[0],&v[1],&v[2]);
            //找出速度最快的 再将其放到第一项
            max_vi=0;for(i=1;i<3;i++)if(v[i]>v[max_vi])max_vi=i;
            if(max_vi!=0)
            {
                temp=v[max_vi];v[max_vi]=v[0];v[0]=temp;
                temp=t[max_vi];t[max_vi]=t[0];t[0]=temp;
            }
            time=t[0];
            //依次根据time 设距离s
            while(1)
            {
                s=v[0]*time;
                if((s/v[1])%24==t[1]&&(s/v[2])%24==t[2])break;
                time+=24;
            }
            printf("%d
    ",s);
        }
        return 0;
    }

    33、回文数

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    int isPlalindrome(char* str)
    {
        int size=strlen(str);
        int i=0,j=size-1;
        while(i<j)
        {
            if(str[i]!=str[j]) return 0;
            i++,j--;
        }
        return 1;
    }
    __int64 getReverseInt(char* str)
    {
        int len=strlen(str),i;
        __int64 res=0;
        for(i=len-1;i>=0;i--)
        res=res*10+str[i]-'0';
        return res;
    }
    int main()
    {
        __int64 n,a,b;
        char str[10];
        while(1)
        {
            scanf("%I64d",&n);
            if(n==0)break;
            while(1)
            {
                itoa(n,str,10);
                a=n;b=getReverseInt(&str[0]);
                n=a+b;
                printf("%I64d+%I64d=%I64d
    ",a,b,n);
                itoa(n,str,10);
                if(isPlalindrome(&str[0]))break;
            }
        }
        return 0;
    }

    34、特殊四位数

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <stdlib.h>
    int main()
    {
        //char str[4];
        int n,size=0,i;
        int res[3]={1156,3136,7921};
        /*for(i=1000;i<=9999;i++)
        {
            if(sqrt(i)-(int)sqrt(i)!=0)continue;
            itoa(i,str,10);
            if(str[0]-'0'+str[2]-'0'==(str[1]-'0')*(str[3]-'0'))
                res[size++]=i;
        }*/
        while(~scanf("%d",&n))
            printf("%d
    ",res[n-1]);
        return 0;
    }

    35、最大值

    #include <stdio.h>
    #include <malloc.h>
    int getNextN(int* arr,int size,int index,int n)
    {
        int res=0,i=index;
        while(i<index+n)res+=arr[i++];
        return res;
    }
    int main()
    {
        int n,a,b,res,i,j,max,temp;
        while(~scanf("%d%d%d",&n,&a,&b))
        {
            int *arr=(int*)malloc(sizeof(int)*n);
            for(i=0;i<n;i++)scanf("%d",&arr[i]);
            max=arr[0];
            for(i=a;i<=b;i++)
            {
                for(j=0;j<n-i+1;j++)
                {
                    temp=getNextN(arr,n,j,i);
                    if(temp>max)max=temp;
                }
            }
            printf("%d
    ",max);
        }
        return 0;
    }

    36、数列1

    #include <stdio.h>
    #include <malloc.h>
    int getNextNSum(int* arr,int size,int index,int n)
    {
        int res=0,i=index;
        while(i<index+n)res+=arr[i++];
        return res;
    }
    int main()
    {
        int n,i,j,count,temp;
        while(~scanf("%d",&n))
        {
            count=0;
            int *arr=(int*)malloc(sizeof(int)*n);
            for(i=0;i<n;i++)scanf("%d",&arr[i]);
            for(i=1;i<=n;i++)
            {
                for(j=0;j<n-i+1;j++)
                {
                    temp=getNextNSum(arr,n,j,i);
                    if(temp%11==0)count++;
                }
            }
            printf("%d
    ",count);
        }
        return 0;
    }

    37、混合牛奶

    #include <stdio.h>
    #include <malloc.h>
    #include <iostream>
    using namespace std;
    typedef struct farmers
    {
        int price;
        __int64 account;
    }Farmer;
    void sort(Farmer* farmers,int size)
    {
        int i,j,flag;
        for(i=0;i<size-1;i++)
        {
            flag=0;
            for(j=1;j<size-i;j++)
            {
                if(farmers[j].price<farmers[j-1].price)
                {
                    swap(farmers[j],farmers[j-1]);
                    flag=1;
                }
            }
            if(!flag)break;
        }
    }
    int main()
    {
        __int64 total,res=0;
        int num,i;
        scanf("%I64d%d",&total,&num);
        Farmer *farmers=(Farmer*)malloc(sizeof(Farmer)*num);
        for(i=0;i<num;i++)
            scanf("%d%I64d",&farmers[i].price,&farmers[i].account);
        sort(farmers,num);
        i=0;
        while(total)
        {
            if(farmers[i].account<total)
            {
                res+=farmers[i].account*farmers[i].price;
                total-=farmers[i].account;
                i++;
            }
            else
            {
                res+=total*farmers[i].price;
                total=0;
            }
        }
        printf("%I64d
    ",res);
        return 0;
    }

    38、修理牛棚

    #include <stdio.h>
    #include <malloc.h>
    #include <stdlib.h>
    //M为木板最大数 C是牛的数目 a[]为安置牛的牛棚编号大小为C
    //1# 若木板数比牛数多M>=C 
    //       每个牛用一块木板,长度为C
    //2# 若木板数小于牛棚数
    //       先用一整根木板挡住牛棚 长度为L1=a[C-1]-a[0]+1
    //       再将这一整根木板切掉M-1处没有放牛 但需要遮挡的连续的牛棚的长度(每次选择最长的) 
    //       算出两个相邻的牛棚所需的额外放置的无用木板 C-1个放在b[]中
    //       在b[]中找出M-1个无用木板 总长度为L2
    //       结果为L1-L2
    int cmp(const void* a,const void*b)
    {
        return (*(int*)a-*(int*)b);
    }
    int main()
    {
        int M,C,i,index;
        scanf("%d%d",&M,&C);
        int *a=(int*)malloc(sizeof(int)*C);
        int *b=(int*)malloc(sizeof(int)*(C-1));
        for(i=0;i<C;i++)scanf("%d",&a[i]);
        if(M>=C )printf("%d
    ",C);//1#
        else//2#
        {
            qsort(a,C,sizeof(int),cmp);//牛棚排序
            int L1=a[C-1]-a[0]+1;
            for(i=0;i<C-1;i++)b[i]=a[i+1]-a[i]-1;//算出M-1个 连续无用木板的长度
            qsort(b,C-1,sizeof(int),cmp);//排序无用木板
            index=C-2;
            for(i=0;i<M-1;i++)L1-=b[index--];//减去M-1个 最长的连续无用木板
            printf("%d
    ",L1);
        }
        return 0;
    }

    39、奇妙的数字

    #include <stdio.h>
    __int64 getSum(__int64 n)
    {
        __int64 res=0;
        while(n)
        {
            res+=n%10;
            n/=10;
        }
        return res;
    }
    int main()
    {
        __int64 res[10],i=0;;
        int size=0,n;
        for(i=0;size<10;i++)
            if(getSum(i)%17==0&&getSum(i+1)%17==0)res[size++]=i;
        while(~scanf("%d",&n))printf("%I64d
    ",res[n-1]);
        return 0;
    }

    40、按要求输出序列

    #include <stdio.h>
    #include <stdlib.h>
    int cmp(const void* a,const void *b)
    {
        return (*(int*)a-*(int*)b);
    }
    int main()
    {
        int n,i,p;
        int arr[200]={0};
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)scanf("%d",&arr[i]);
            qsort(arr,n,sizeof(int),cmp);
            p=0;
            for(i=1;i<n;i++)
            {
                if(arr[i]!=arr[p])arr[++p]=arr[i];
            }
            for(i=0;i<p;i++)printf("%d ",arr[i]);printf("%d
    ",arr[i]);
        }
        return 0;
    }

    41、部落人乘法

    #include <stdio.h>
    int main()
    {
        int a,b,res,temp;
        while(~scanf("%d%d",&a,&b))
        {
            res=0;
            printf("%d*%d=",a,b);
            while(1)
            {
                if(a==1){res+=b;printf("%d=%d
    ",b,res);break;}
                if(a%2==1){res+=b;printf("%d+",b);}
                a/=2;b*=2;
            }
        }
    
        return 0;
    }

    42、双重回文数

    #include <stdio.h>
    //进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101
    char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
    int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序)
    {    int mod_num,i=0,flag=0;
        if(num<0){num=-num;flag=1;}
        if(num==0){ch[i++]='0';}
        while(num)
        {
            mod_num=num%r;
            ch[i++]=number[mod_num];
            num/=r;
        }
        if(flag)ch[i++]='-';
        return i-1;
    }
    int isPalindrome(char* ch,int size)
    {
        int i=0,j=size,flag=1;
        while(!(i-1==j)&&!(i==j))
        {
            if(ch[i]!=ch[j]){flag=0;break;}
            i++,j--;
        }
        return flag;
    }
    int main()
    {
        int n,s,i,r,count,size;
        char ch[10000];
        scanf("%d%d",&n,&s);
        for(i=s+1;n>0;i++)
        {
            count=0;
            for(r=2;r<=10;r++)
            {
                size=D2R(i,r,&ch[0]);
                if(isPalindrome(&ch[0],size))count++;
                if(count==2){printf("%d
    ",i);n--;break;}
            }
        }
        return 0;
    }

    42、数列2

    #include <stdio.h>
    #include <string.h>
    //类似思路 https://blog.csdn.net/qq_39883358/article/details/88929010
    //每个数都有选或者不选两种情况
    int fun(int index,int sum,int* a,int size)
    {
        if(index==size-1&&(sum%11!=0||sum==0))return 0;
        else if(index==size-1&&sum%11==0)return 1;
        else
            return fun(index+1,sum+a[index+1],a,size)+//选第index+1个
        fun(index+1,sum,a,size);//不选index+1个
    }
    int main()
    {
        int a[15];
        int n,i;
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)scanf("%d",&a[i]);
            printf("%d
    ",fun(-1,0,a,n));
        }
        return 0;
    }

    43、序列

    #include <stdio.h>
    //先构造一个差为1的等差数列 再将剩余的依次加到每项
    int main()
    {
        int res[143];
        int i,n,size;
        while(~scanf("%d",&n))
        {
            int remain=n,i=0;
            while(i<=remain)
            {
                res[i]=i;
                remain-=i;
                i++;
            }
            size=i;
            for(i=size-1;i>=1&&remain;i--)
            {
                remain--;
                res[i]++;
            }
            for(i=1;i<size-1;i++)
                printf("%d,",res[i]);
            printf("%d
    ",res[i]);
        }
        return 0;
    }

    44、双重回文数

    #include <stdio.h>
    //进制转换 取余倒序 5%2=1 5/2=2; 2%2=0 2/2=1 ;1%2=1 1/2=0; 5=101
    char number[21]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K'};
    int D2R(int num,int r,char *ch)//将十进制数num转为r进制数 返回的size为所求数的第一位的位置(倒序)
    {    int mod_num,i=0,flag=0;
        if(num<0){num=-num;flag=1;}
        if(num==0){ch[i++]='0';}
        while(num)
        {
            mod_num=num%r;
            ch[i++]=number[mod_num];
            num/=r;
        }
        if(flag)ch[i++]='-';
        return i-1;
    }
    int isPalindrome(char* ch,int size)
    {
        int i=0,j=size,flag=1;
        while(!(i-1==j)&&!(i==j))
        {
            if(ch[i]!=ch[j]){flag=0;break;}
            i++,j--;
        }
        return flag;
    }
    int main()
    {
        int n,s,i,r,count,size;
        char ch[10000];
        scanf("%d%d",&n,&s);
        for(i=s+1;n>0;i++)
        {
            count=0;
            for(r=2;r<=10;r++)
            {
                size=D2R(i,r,&ch[0]);
                if(isPalindrome(&ch[0],size))count++;
                if(count==2){printf("%d
    ",i);n--;break;}
            }
        }
        return 0;
    }

    45、等差数列

    #include <stdio.h>
    #include <math.h>
    #include <malloc.h>
    #include <string.h>
    int doubleSquare[250*250*2+1];//双平方数
    //返回数列的第i项
    int fun(int a,int b,int i)
    {
        return a+b*i;
    }
    //先判断上界为m的双平方数
    void initDoubleSquare(int m)
    {
        memset(doubleSquare,0,sizeof(int)*(m*m*2+1));
        int i,j;
        for(i=0;i<=m;i++)
            for(j=i;j<=m;j++)
                doubleSquare[i*i+j*j]=1;
    }
    int main()
    {
        int n,m,i,max,a,b,flag,exist;
        //for(i=1;i<250;i++)if(doubleSquare[i])printf("%d ",i);
        while(~scanf("%d%d",&n,&m))
        {
            exist=0;//判断是否存在这样的数组
            max=2*m*m+1;//数组的上界
            initDoubleSquare(m);
            /*for(i=1;i<max;i++)if(doubleSquare[i])printf("%d ",i);
            printf("
    ");*/
            
            for(b=1;(n-1)*b<max;b++)//当a=0时,数组最后一项大于数组上界结束
            {
                for(a=0;fun(a,b,n-1)<max;a++)//当数组最后一项大于数组上界结束
                {
                    flag=1;
                    for(i=0;i<n;i++)
                    {
                        if(!doubleSquare[fun(a,b,i)])
                        {
                            flag=0;
                            break;
                        }
                    }
                    if(flag)
                    {
                        exist=1;    
                        printf("%d %d
    ",a,b);
                    }    
                }
            }
            if(!exist)printf("NONE
    ");
        }
        return 0;
    }

    46、人见人爱A-B

    #include <stdio.h>
    #include <stdlib.h>
    int cmp(const void*a,const void* b)
    {
        return (*(int*)a-*(int*)b);
    }
    int main()
    {
        int num,i,j,n,m,p1,p2;
        int a[100],b[100];
        scanf("%d",&num);
        while(num--)
        {
            scanf("%d%d",&n,&m);
            for(i=0;i<n;i++)scanf("%d",&a[i]);
            for(i=0;i<m;i++)scanf("%d",&b[i]);
            qsort(a,n,sizeof(int),cmp);
            qsort(b,m,sizeof(int),cmp);
            p1=-1,p2=0;//p2为工作指针 p1为结果指针
            for(i=0;i<m;i++)
            {
                //如果a[p2]的值比b[i]的值小 那么保存a[p2]的值 p2++
                while(a[p2]<b[i]&&p2<n)
                    a[++p1]=a[p2++];
    
                //如果a[]到了尽头break
                if(p2==n)break;
    
                //如果a[p2]的值等于b[i]的值 不保存a[p2]的值 p2++
                if(a[p2]==b[i])p2++;
                //默认情况  如果a[p2]的值大于b[i]的值i++
            }
            //当p2<n 保存剩下的值
            while(p2<n)a[++p1]=a[p2++];
    
            if(p1+1==0)printf("NULL
    ");
            else 
            {
                for(i=0;i<p1+1;i++)
                    printf("%d ",a[i]);
                printf("
    ");
            }
        }
        return 0;
    }

    47、最少拦截系统

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    #include <malloc.h>
    int findMinSys(int* a,int size)
    {
        int *visited=(int*)malloc(sizeof(int)*size);
        memset(visited,0,sizeof(int)*size);
        visited[0]=1;
        int pre=a[0],i=1;
        int count=size-1,res=1;
        //每次找比上一个小的数 并标记
        //过完一趟 就是一个系统拦截的导弹
        //res等于遍历的躺数
        while(count)
        {
            if(i==size)pre=10000,i=0,res++;
            if(a[i]<pre&&visited[i]==0)pre=a[i],count--,visited[i]=1;
            i++;
        }
        free(visited);
        return res;
    }
    int main()
    {
        int n,num,i;
        int a[1000];
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&num);
            for(i=0;i<num;i++)scanf("%d",&a[i]);
            printf("%d
    ",findMinSys(a,num));
        }
        return 0;
    }

    48、求N!

    #include <stdio.h>
    #include <string.h>
    const int MAX_SIZE=100000;
    int main()
    {
        int res[MAX_SIZE];
        int i,j,n,size,carry,temp;
        while(~scanf("%d",&n))
        {
            memset(res,0,sizeof(int)*MAX_SIZE);
            res[0]=1;
            size=1;
            carry=0;//进位
            for(i=2;i<=n;i++)
            {
                for(j=0;j<size;j++)
                {
                    temp=res[j]*i+carry;
                    res[j]=temp%10;
                    carry=temp/10;
                }
                while(carry)
                {
                    res[size++]=carry%10;
                    carry/=10;
                }
            }
            for(i=size-1;i>0;i--)
                printf("%d",res[i]);
            printf("%d
    ",res[i]);
        }
        return 0;
    }

    49、我素故我在

    #include <stdio.h>
    #include <math.h>
    int isPrimeNumber(int n)
    {
        if(n==1)return 0;
        int i;
        for(i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    } 
    int removeLowest(int n)
    {
        return n/10;
    }
    int isPurePrimeNumber(int n)
    {
        while(n)
        {
            if(!isPrimeNumber(n))return 0;
            n=removeLowest(n);
        }
        return 1;
    }
    //直接暴力找的话会超时
    int main()
    {
        int i,j,size=0,cur_size=0,temp,n,width,k,val;
        int res[8][20];
        for(i=2;i<10;i++)if(isPurePrimeNumber(i))res[0][size++]=i;
        res[0][size]=0;
        for(i=1;i<8;i++)
        {
            for(j=0;j<size;j++)
            {
                temp=res[i-1][j]*10;
                for(k=1;k<10;k++)
                {
                    val=temp+k;
                    if(isPurePrimeNumber(val))
                    {    
                        //printf("%d
    ",val);
                        res[i][cur_size++]=val;
                    }
                }
            }
            //printf("%d
    ",size);
            res[i][cur_size]=0;
            size=cur_size;
            cur_size=0;
        }
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&width);
            for(i=0;res[width-1][i]!=0;i++)
                printf("%d
    ",res[width-1][i]);
        }
        return 0;
    }

    50、素数

    #include <stdio.h>
    #include <math.h>
    int isPrimeNumber(int n)
    {
        if(n==1)return 0;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    }
    int main()
    {
        int a,b,temp,count;
        while(~scanf("%d%d",&a,&b))
        {
            count=0;
            if(a>b){temp=a;a=b;b=temp;}
            for(int i=a;i<=b;i++)
                if(isPrimeNumber(i))
                    count++;
            printf("%d
    ",count);
        }
        return 0;
    }

    51、歌德巴赫猜想

    #include <stdio.h>
    #include <math.h>
    int isPrimeNumber(int n)
    {
        if(n==1)return 0;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    }
    int main()
    {
        int n,num,i;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&num);
            for(i=2;i<=num/2;i++)
                if(isPrimeNumber(i)&&isPrimeNumber(num-i)){printf("%d %d
    ",i,num-i);break;}
        }
        return 0;
    }

    52、N的倍数

    #include <stdio.h>
    int isAns(int n)
    {
        int temp;
        while(n)
        {
            temp=n%10;
            if(!(temp==1||temp==0))return 0;
            n/=10;
        }
        return 1;
    }
    int main()
    {
        int n,ans,i;
        while(~scanf("%d",&n))
        {
            for(i=1;;i++)
            {
                ans=i*n;
                if(isAns(ans)){printf("%d
    ",ans);break;}
            }
        }
        return 0;
    }

    53、求n天后的日期

    #include <stdio.h>
    int getYearDay(int year)
    {
        if(year%400==0||(year%4==0&&year%100!=0))return 366;
        else return 365;
    }
    int getMonthDay(int year,int month)
    {
        int flag=0;
        if(year%400==0||(year%4==0&&year%100!=0))flag=1;
        int days;
        switch(month)
        {
            case 4:
            case 6:
            case 9:
            case 11:days=30;break;
            case 2:days=flag?29:28;break;
            default:days=31;break;
        }
        return days;
    }
    int main()
    {
        int y,m,d,n,i;
        scanf("%d%d%d%d",&y,&m,&d,&n);
        //先化成1/1
        if(d!=1){n+=(d-1);d=1;}
        if(m!=1){for(i=m-1;i>=1;i--)n+=getMonthDay(y,i);m=1;}
    
        while(n>=getYearDay(y)){n-=getYearDay(y);y++;}
        while(n>=getMonthDay(y,m)){n-=getMonthDay(y,m);m++;}
        d+=n;
        printf("%d %d %d
    ",y,m,d);
        return 0;
    }

    54、菱形输出

    #include <stdio.h>
    #include <string.h>
    void fun(int n)
    {
        char ch='Z';
        int i,j,pre_l,pre_r;
        if(n==1)
        {
            printf("%c
    ",ch);
        }
        else
        {
            //上半菱形 加 中间一行
            for(i=1;i<=n-1;i++)printf(" ");
            printf("%c
    ",ch--);
            pre_l=pre_r=n;//上个输出的位置
            for(i=2;i<=n;i++)
            {
                for(j=1;j<=2*n-1;j++)
                {
                    if(j==pre_l-1)
                    {
                        printf("%c",ch--);
                        pre_l--;
                    }
                    else if(j==pre_r+1)
                    {
                        printf("%c
    ",ch--);
                        pre_r++;
                        break;
                    }
                    else
                        printf(" ");
                }
            }
            //下半菱形 
            for(i=1;i<=n-2;i++)
            {
                for(j=1;j<=2*n-1;j++)
                {
                    if(j==pre_l+1)
                        printf("%c",ch--);
                    else if(j==pre_r-1)
                    {
                        printf("%c
    ",ch--);
                        pre_l++;
                        pre_r--;
                        break;
                    }
                    else
                        printf(" ");
                }
            }
            for(i=1;i<=n-1;i++)printf(" ");
            printf("%c
    ",ch--);
        }
        printf("
    ");
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
            fun(n);
        return 0;
    }

    55、三角形的个数

    #include <stdio.h>
    #include <string.h>
    //a<b<c<a+b;a+b+c=n
    void fun(int n)
    {
        int a,b,c,res=0;
        for(a=1;a<n-1;a++)
        {
            for(b=a+1;a+b<n;b++)
            {
                c=n-a-b;
                if(c<a+b&&c>b)res++;
            }
        }
        printf("%d
    ",res);
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
            fun(n);
        return 0;
    }

    56、汉诺塔问题的第m步

    #include <stdio.h>
    #include <string.h>
    int k;//执行的步数
    int flag;//是否存在第m步
    void move(char from,int val,char to,int m)
    {
        k++;
        if(k==m)
        {
            printf("%c--%c
    ",from,to);
            flag=1;
        }
        //printf("%d:将%d从%c移动到%c
    ",k++,val,from,to);
    }
    //当n==1时将盘子从a移动到c即可
    //将a中n-1个盘子移动到b上 
    //将a中最后一个盘子移动到c上 
    //将b上n-1个盘子移动到c上
    void Hanoi(int n,char a,char b,char c,int m)
    {
        if(k>m)return;
        if(n==1)
            move(a,1,c,m);
        else
        {
            Hanoi(n-1,a,c,b,m);
            move(a,n,c,m);
            Hanoi(n-1,b,a,c,m);
        }
    }
    int main()
    {
        int n,m;
        while(~scanf("%d%d",&n,&m))
        {
            k=0;
            flag=0;
            Hanoi(n,'A','B','C',m);
            if(!flag)printf("none
    ");
        }
        return 0;
    }

    57、数字游戏

    #include <stdio.h>
    #include <string.h>
    //将两个字符串 正接和反接判断哪个大
    //冒泡
    void sort(char str[50][50],int n)
    {
        int i,j,flag;
        char temp[50];
        char a[100];
        char b[100];
        for(i=0;i<n-1;i++)
        {
            flag=0;
            for(j=1;j<n;j++)
            {
                strcpy(a,str[j-1]);
                strcat(a,str[j]);//a中是str[j-1]拼接str[j]
                strcpy(b,str[j]);
                strcat(b,str[j-1]);//b中是str[j]拼接str[j-1]
                //printf("%s %s %d
    ",a,b,strcmp(a,b));
                if(strcmp(a,b)==-1)//后一个大于前一个
                {
                    strcpy(temp,str[j-1]);
                    strcpy(str[j-1],str[j]);
                    strcpy(str[j],temp);
                    //交换位置
                    flag=1;
                }
            }
            if(!flag)break;
        }
    }
    int main()
    {
        int n,i;
        char str[50][50];
        while(~scanf("%d",&n))
        {
            if(n==0)break;
            for(i=0;i<n;i++)scanf("%s",str[i]);
            sort(str,n);
            for(i=0;i<n;i++)printf("%s",str[i]);printf("
    ");
        }
        return 0;
    }

    58、矩阵转换

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        int n,i,j;
        int a[10][10];
        int res[10][10];
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%d",&a[i][j]);
            for(i=0;i<n;i++)
            {
                for(j=0;j<n;j++)
                {
                    if(i==j)
                        res[i][j]=a[i][j];
                    else
                        res[i][j]=a[j][i];
                }
            }
            for(i=0;i<n;i++){for(j=0;j<n-1;j++)printf("%d ",res[i][j]);printf("%d
    ",res[i][j]);}
            printf("
    ");
        }
        return 0;
    }

    59、魔方矩阵

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        int n,count,i,j,val;
        int res[19][19]={0};
        while(~scanf("%d",&n))
        {
            memset(res,0,sizeof(int)*19*19);
            val=1;
            i=0,j=n/2;
            while(val<=n*n)
            {
                res[i][j]=val++;
                if((i==0&&j==n-1))i=(i+1)%n;
                else 
                {
                //    printf("%d %d %d
    ",i,j,val);
                    if(res[(i-1)%n<0?(i-1)%n+n:(i-1)%n][(j+1)%n]==0)
                    {
                        i=(i-1)%n<0?(i-1)%n+n:(i-1)%n;
                        j=(j+1)%n;
                    }
                    else
                        i=(i+1)%n;
                }
            }
            for(i=0;i<n;i++)
            {
                for(j=0;j<n-1;j++)
                    printf("%d ",res[i][j]);
                printf("%d
    ",res[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }

    60、最大效益

    #include <stdio.h>
    //每次从表中找出最大的数 然后将这一行 这一列置为负数
    int main()
    {
        int a[5][5];
        int i,j,n,res=0,max_i,max_j,max;
        while(~scanf("%d",&a[0][0]))
        {
            n=5,res=0;
            for(i=0;i<5;i++)
                for(j=0;j<5;j++)
                {
                    if(i==0&&j==0)continue;
                    scanf("%d",&a[i][j]);
                }
            while(n--)
            {
                max=-1;
                for(i=0;i<5;i++)
                {
                    for(j=0;j<5;j++)
                    {
                        if(a[i][j]>max)    
                        {
                            max=a[i][j];
                            max_i=i;
                            max_j=j;
                        }
                    }
                }
                res+=max;
                for(i=0;i<5;i++)a[i][max_j]=-1;
                for(j=0;j<5;j++)a[max_i][j]=-1;
            }
            printf("%d
    ",res);
        }
        return 0;
    }

    61、螺旋方阵

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        int n,i,j;
        int res[10][10];
        while(~scanf("%d",&n))
        {
            //l左边界 r右 t上 b下
            int l=0,r=n-1,t=0,b=n-1,len=n*n,num=1;
            memset(res,0,sizeof(int)*10*10);
            while(num<=len)
            {
                for(i=l;i<=r;i++)res[t][i]=num++;
                t++;
                for(i=t;i<=b;i++)res[i][r]=num++;
                r--;
                for(i=r;i>=l;i--)res[b][i]=num++;
                b--;
                for(i=b;i>=t;i--)res[i][l]=num++;
                l++;
            }
            for(i=0;i<n;i++)
            {
                for(j=0;j<n-1;j++)
                    printf("%d ",res[i][j]);
                printf("%d
    ",res[i][j]);
            }
            printf("
    ");
        }
        return 0;
    }

    62、方块转换

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int fun(char a[10][10],char b[10][10],int n)
    {
        int flag,i,j;
        /*for(i=0;i<n;i++)
        {    
            for(j=0;j<n;j++)
                printf(" %c,%c ",a[i][j],b[i][j]);
            printf("
    ");
        }*/
        //1
        flag=1;
        for(i=0;i<n;i++)    
        {for(j=0;j<n;j++)if(a[i][j]!=b[j][n-i-1])
        {flag=0;break;}}if(flag)return 1;
    
        //2
        flag=1;
        for(i=0;i<n;i++)    
        {for(j=0;j<n;j++)if(a[i][j]!=b[n-i-1][n-j-1])
        {flag=0;break;}}if(flag)return 2;
    
        //3
        flag=1;
        for(i=0;i<n;i++)    
        {for(j=0;j<n;j++)if(a[i][j]!=b[n-j-1][i])
        {flag=0;break;}}if(flag)return 3;
    
        //4
        flag=1;
        for(i=0;i<n;i++)    
        {for(j=0;j<n;j++)if(a[i][j]!=b[i][n-j-1])
        {flag=0;break;}}if(flag)return 4;
    
        //5
        char **c;
        c=(char**)malloc(sizeof(char*)*n);
        for(i=0;i<n;i++)c[i]=(char*)malloc(sizeof(char)*n);
        for(i=0;i<n;i++)for(j=0;j<n;j++)c[i][j]=a[i][n-j-1];
        int count_1=0,count_2=0,count_3=0;
        for(i=0;i<n;i++)    
        {
            for(j=0;j<n;j++)
            {
                if(c[i][j]==b[j][n-i-1])count_1++;
                if(c[i][j]==b[n-i-1][n-j-1])count_2++;
                if(c[i][j]==b[n-j-1][i])count_3++;
            }
        }
        //printf("%d %d %d
    ",count_1,count_2,count_3);
        if(count_1==n*n||count_2==n*n||count_3==n*n)return 5;
    
    
        //6
        flag=1;
        for(i=0;i<n;i++)    
        {for(j=0;j<n;j++)if(a[i][j]!=b[i][j])
        {flag=0;break;}}if(flag)return 6;
    
        return 7;
    }
    int main()
    {
        char a[10][10];
        char b[10][10];
        int i,j,n;
        scanf("%d",&n);
        getchar();
        for(i=0;i<n;i++)    
        {
            getchar();
            for(j=0;j<n;j++)
                scanf("%c",&a[i][j]);
            getchar();
        }
        for(i=0;i<n;i++)    
        {
            getchar();
            for(j=0;j<n;j++)
                scanf("%c",&b[i][j]);
            getchar();
        }
        printf("%d
    ",fun(a,b,n));
        return 0;
    }

    63、阵列

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    //返回矩阵最小维数
    int getN(int n)
    {
        int res=1;
        while(res*res<n)res++;
        return res;
    }
    //1 5-9 17-25 36-49 65-81
    //2-4 10-16 26-36 50-64 82-100
    //2 4 6 8 10
    void my_print(int res[11][11],int N,int n)
    {
        char val[3];
        int count=n;
        int left=0,top=0,right=N-1,bottom=N-1,i,j;
        if(N%2==0)right=N,bottom=N;//N是偶数是 会空一圈
        if(res[0][0]==0)left++;
        if(res[0][right]==0)top++;
        if(res[right][bottom]==0)right--;
        //printf("%d %d %d %d
    ",left,right,top,bottom);
        //n小于10时 都是占1位
        //=10 第一列2位
        //=11 第1、2列2位
        //>=12 全都2位
        for(i=top;i<=bottom;i++)
        {
            for(j=left;j<right;j++)
            {
                if(res[i][j]==65&&n==99)break;
                if(res[i][j]==0)strcpy(val," ");
                else {itoa(res[i][j],&val[0],10);count--;}
                if(count==0)break;
                //printf("-%s-
    ",val);
                if((n>=12)||(n==10&&j==left)||(n==11&&(j==left||j==left+1)))printf("%2s ",val);
                else printf("%s ",val);
            }
            if(res[i][j]==0)strcpy(val," ");
            else {itoa(res[i][j],&val[0],10);count--;}
    
            //printf("-%s-
    ",val);
            if((n>=12)||(n==10&&j==left)||(n==11&&(j==left||j==left+1)))printf("%2s
    ",val);
            else printf("%s
    ",val);
        }
        printf("
    ");
    }
    int main()
    {
        int res[11][11];
        //dirction 0是下 1是向右 2是向上 3是向左
        int i,j,val,direction,n,N;
        while(~scanf("%d",&n))
        {
            N=getN(n);
            val=1;
            memset(res,0,sizeof(int)*11*11);
            i=N/2,j=N/2;
            direction=3;
            while(val<=n)
            {
                res[i][j]=val++;
                if(direction==3)
                {
                    //可以拐弯
                    if(res[i+1][j]==0)
                        i++,direction=0;
                    else j--;
                    continue;
                }
                else if(direction==0)
                {
                    if(res[i][j+1]==0)
                        j++,direction=1;
                    else i++;
                    continue;
                }
                else if(direction==1)
                {
                    if(res[i-1][j]==0)
                        i--,direction=2;
                    else j++;
                    continue;
                }
                else if(direction==2)
                {
                    if(res[i][j-1]==0)
                        j--,direction=3;
                    else i--;
                    continue;
                }
            }
            /*for(i=0;i<11;i++)
            {
                for(j=0;j<10;j++)
                    printf("%2d ",res[i][j]);
                printf("%2d
    ",res[i][j]);
            }
            printf("
    ");*/
            my_print(res,N,n);
        }
        return 0;
    }

    64、饲料调配

    #include <stdio.h>
    int main()
    {
        int a[4][3];//={{3,4,5},{1,2,3},{3,7,1},{2,1,2}};
        int temp[3];
        int i,j,k,t;
        for(i=0;i<4;i++)
            for(j=0;j<3;j++)scanf("%d",&a[i][j]);
        int max=300,res_i=-1,res_j=-1,res_k=-1,res_t=-1;
        for(i=0;i<100&&i<max;i++)
        {
            for(j=0;j<100&&i+j<max;j++)
            {
                for(k=0;k<100&&i+k+j<max;k++)
                {
                    if(i+k+j==0)continue;
                    for(t=0;t<3;t++)
                    temp[t]=i*a[1][t]+j*a[2][t]+k*a[3][t];
                    t=temp[0]/a[0][0];
                    //printf("%d %d %d %.1f %.1f
    ",i,j,k,(double)t,(double)temp[0]/a[0][0]);
                    if((double)t!=(double)temp[0]/(double)a[0][0])continue;
                    if(t*a[0][1]!=temp[1]||t*a[0][2]!=temp[2])continue;
                    max=i+j+k;
                    res_i=i;
                    res_k=k;
                    res_j=j;
                    res_t=t;
                
                }
            }
        }
        if(res_t==-1)printf("NONE
    ");
        else printf("%d %d %d %d
    ",res_i,res_j,res_k,res_t);
        return 0;
    }

    65、乒乓球

    #include <stdio.h>
    #include <string.h>
    void fun(char* str,int score)
    {
        int size=strlen(str);
        int a,b,i=0,flag;
        while(i<size)
        {
            a=0,b=0,flag=0;
            for(;i<size;i++)
            {
                if(str[i]=='W')a++;
                else if(str[i]=='L') b++;
                if((a>=score||b>=score)&&(a-b>=2||b-a>=2))
                {
                    printf("%d:%d
    ",a,b);
                    flag=1;
                    i++;
                    break;
                }
            }
        }
        if(!flag&&(a||b))
            printf("%d:%d
    ",a,b);
        printf("
    ");
    }
    int main()
    {
        char ch;
        char str[200],size=0;
        while(~scanf("%c",&ch))
        {
            if(ch=='W'||ch=='L')
                str[size++]=ch;
            if(ch=='E')
            {
                str[size]='';
                fun(str,11);
                fun(str,21);
                size=0;
            }
        }
        return 0;
    }

    66、字符串统计

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void fun(char* a,char* b)
    {
        int a_len=strlen(a),b_len=strlen(b);
        int i,count_a[26]={0},count_b[26]={0};
        for(i=0;i<a_len;i++)count_a[a[i]-'a']++;
        for(i=0;i<b_len;i++)count_b[b[i]-'a']++;
        printf("in s1 or s2:");
        for(i=0;i<26;i++)if(count_a[i]||count_b[i])printf("%c",i+'a');
        printf("
    ");
    
        printf("in s1 and s2:");
        for(i=0;i<26;i++)if(count_a[i]&&count_b[i])printf("%c",i+'a');
        printf("
    ");
    
        printf("in s1 but not in s2 ,or in s2 but not in s1:");
        for(i=0;i<26;i++)
            if((count_a[i]&&!count_b[i])||(!count_a[i]&&count_b[i]))printf("%c",i+'a');
        printf("
    ");
    
        printf("not in s1 and s2:");
        for(i=0;i<26;i++)if(!count_a[i]&&!count_b[i])printf("%c",i+'a');
        printf("
    ");
        printf("
    ");
    }
    int main()
    {
        char a[26];
        char b[26];
        while(~scanf("%s",&a[0])&&getchar())
        {
            scanf("%s",&b[0]);getchar();
            fun(a,b);
        }
        return 0;
    }

    67、求字符串起始位置

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int main()
    {
        char str[100];
        char sub[100];
        int str_len,sub_len,i;
        while(~scanf("%s",&str[0])&&getchar())
        {
            scanf("%s",&sub[0]);getchar();
            int sub_len=strlen(sub);
            int str_len=strlen(str);
            for(i=0;i<=str_len-sub_len;i++)
            {
                if(strncmp(&str[i],sub,sub_len)==0)break;
            }
            if(i==str_len-sub_len+1)
                printf("0
    ");
            else
                printf("%d
    ",i+1);
        }
        return 0;
    }

    68、最长的单词

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    void fun(char* str)
    {
        char *p=str;
        int res_size=0;
        char res[1000];
        char temp[1000];
        int size=0;
        while(*p!='')
        {
            while(*p!=' '&&*p!='')
                temp[size++]=*(p++);
            temp[size++]='';size--;
            if(size>res_size)
            {
                strcpy(res,temp);
                res_size=size;
            }
            size=0;
            if(*p!='')p++;
        }
        printf("%d %s
    ",res_size,res);
    }
    int main()
    {
        char str[1000];
        while(~scanf("%[^
    ]",&str[0])&&getchar())
        fun(&str[0]);
        return 0;
    }

    69、奖学金

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    typedef struct stu
    {
        char name[21];
        int final_avg;
        int preview_score;
        char isLeader;
        char isWest;
        int paper_num;
        int scholarship;
    }Stu;
    void computeScholarship(Stu* stus,int size)
    {
        int i;
        for(i=0;i<size;i++)
        {
            stus[i].scholarship=0;
            if(stus[i].final_avg>80&&stus[i].paper_num>=1)
                stus[i].scholarship+=8000;
            if(stus[i].final_avg>85&&stus[i].preview_score>80)
                stus[i].scholarship+=4000;
            if(stus[i].final_avg>90)
                stus[i].scholarship+=2000;
            if(stus[i].final_avg>85&&stus[i].isWest=='Y')
                stus[i].scholarship+=1000;
            if(stus[i].preview_score>80&&stus[i].isLeader=='Y')
                stus[i].scholarship+=850;
        }
    }
    int main()
    {
        int n,i,sum,max_index;
        Stu stus[100];
        while(~scanf("%d",&n))
        {
            for(i=0;i<n;i++)
            {
                scanf("%s",&stus[i].name);
                getchar();
                scanf("%d%d",&stus[i].final_avg,&stus[i].preview_score);
                getchar();
                scanf("%c",&stus[i].isLeader);
                getchar();
                scanf("%c",&stus[i].isWest);
                getchar();
                scanf("%d",&stus[i].paper_num);
                getchar();
            }
            computeScholarship(stus,n);
            sum=0;max_index=0;
            for(i=0;i<n;i++)
            {
                sum+=stus[i].scholarship;
                if(stus[i].scholarship>stus[max_index].scholarship)max_index=i;
            }
            printf("%s
    ",stus[max_index].name);
            printf("%d
    ",stus[max_index].scholarship);
            printf("%d
    
    ",sum);
        }
        return 0;
    }

    70、回文数2

    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    int isPalindrome(char* ch)
    {
        int i=0,j=strlen(ch)-1,flag=1;
        while(!(i-1==j)&&!(i==j))
        {
            if(ch[i]!=ch[j]){flag=0;break;}
            i++,j--;
        }
        return flag;
    }
    int main()
    {
        int n;
        char ch[10000];
        while(~scanf("%d",&n))
        {
            itoa(n,ch,10);
            if(!isPalindrome(&ch[0]))
            {
                printf("No
    ");
                continue;
            }
            itoa(n,ch,2);
            if(!isPalindrome(&ch[0]))
            {
                printf("No
    ");
                continue;
            }
            printf("Yes
    ");
        }
        return 0;
    }

    71、加法器(可用92题代码)

    72、构造序列

    #include <stdio.h>
    #include <math.h>
    #include <malloc.h>
    #include <string.h>
    int main()
    {
        int i,n,len,index;
        char **ch;
        char *p1,*p2;
        ch=(char**)malloc(sizeof(char*)*9);
        for(i=0;i<9;i++)ch[i]=(char*)malloc(sizeof(char)*1000);
        ch[0][0]='1',ch[0][1]='1',ch[0][2]='';
        for(i=1;i<9;i++)
        {
            index=0;
            p1=&ch[i-1][0];
            p2=&ch[i-1][1];
            while(*p2!='')
            {
                ch[i][index++]=*p1;
                if((*p1-'0')+(*p2-'0')==i+1)
                    ch[i][index++]='0'+i+1;
                *p1=*(p2++);
            }
            ch[i][index++]=*p1;
            ch[i][index++]='';
        }
        //for(i=0;i<9;i++)printf("%s
    ",ch[i]);
        while(~scanf("%d",&n))
            printf("%s
    ",ch[n-1]);
        return 0;
    }

    73、纯粹合数

    #include <stdio.h>
    #include <math.h>
    int isCompositeNumber(int n)
    {
        if(n==1)return 0;
        int i;
        for(i=2;i<=sqrt(n);i++)
            if(n%i==0)return 1;
        return 0;
    } 
    int removeHighest(int n)
    {
        int r=1;
        while(n>=pow(10,r))r++;r--;
        return n%(int)(pow(10,r)+0.5);//这里四舍五入 不然会错
    }
    int isPureCompositeNumber(int n)
    {
        while(n)
        {
            if(!isCompositeNumber(n))return 0;
            n=removeHighest(n);
        }
        return 1;
    }
    int main()
    {
        const int max_num=100;
        int size=0;
        int res[max_num];
        int i=100;
        while(size<max_num)
        {
            if(isPureCompositeNumber(i))res[size++]=i;
            i++;
        }
        int n;
        while(~scanf("%d",&n))
            printf("%d
    ",res[n-1]);
    
        return 0;
    }

    74、找出质数

    #include <stdio.h>
    #include <string.h>
    #include <math.h>
    int isPrimeNumber(int n)
    {
        int i;
        if(n==1)return 0;
        for(i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    }
    int getNumber(char* str,int index,int end)
    {
        int res=0;
        while(index<end)
            res=res*10+str[index++]-'0';
        return res;
    }
    void fun(char* str)
    {
        int size=strlen(str);
        int res,i,j,flag,temp;
        for(i=4;i>=1;i--)
        {
            flag=0;
            for(j=0;j<=size-i;j++)
            {
                temp=getNumber(str,j,j+i);
                //printf("-%d
    ",temp);
                if(isPrimeNumber(temp)&&flag==0)
                {
                    flag=1;
                    res=temp;
                }
                else if(isPrimeNumber(temp)&&flag==1)
                    res=res>temp?res:temp;
            }
            if(flag==1)break;
        }
        printf("%d
    ",res);
    }
    int main()
    {
        char ch[20];
        while(~scanf("%s",&ch[0])&&getchar())
            fun(&ch[0]);
        return 0;
    }

    75、翻译字符串

    #include <stdio.h>
    #include <string.h>
    void fun(char* str)
    {
        char res[100];
        char temp;
        int i=0,size=0,len=strlen(str),count;
        while(i<len)
        {
            if(str[i]>='0'&&str[i]<='9')
            {
                count=str[i]-'0'+1;
                temp=str[++i];
                while(count--)res[size++]=temp;
                i++;
            }
            else
                res[size++]=str[i++];
        }
        count=0;
        for(i=0;i<size-1;i++)
        {
            if(count==3)
            {
                printf(" %c",res[i]);
                count=1;
            }
            else
            {
                count++;
                printf("%c",res[i]);
            }
        }
        if(count==3)printf(" %c
    ",res[i]);
        else printf("%c
    ",res[i]);
    }
    int main()
    {
        char ch[10];
        while(~scanf("%s",&ch[0])&&getchar())
        {
            fun(&ch[0]);
        }
        return 0;
    }

    76、分割数字并排序

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    int cmp(const void*a,const void* b)
    {
        return *(int*)a>*(int*)b?1:-1;
    }
    int main()
    {
        int res[500];
        char ch[1000];
        int re_size,ch_size,temp,i;
        int n;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%s",&ch[0]);getchar();
            re_size=0,ch_size=strlen(&ch[0]);
            i=0,temp=0;
            while(ch[i]=='5')i++;
            for(;i<ch_size;i++)
            {
                if(ch[i]=='5')
                {
                    if(ch[i-1]=='5')continue;//防止两个五之间没有0
                    res[re_size++]=temp;
                    temp=0;
                }
                else
                    temp=temp*10+ch[i]-'0';
            }
            if(ch[ch_size-1]!='5')res[re_size++]=temp;
            qsort(res,re_size,sizeof(int),cmp);
            for(i=0;i<re_size-1;i++)printf("%d ",res[i]);printf("%d
    ",res[i]);
        }
        return 0;
    }

    77、大实数加法

    #include <stdio.h>
    #include <string.h>
    char a1[400],b1[400];//整数部分
    char a2[400],b2[400];//小数部分
    //返回进位的值
    int my_add(char a[400],char b[400],int c)
    {
        int asize=strlen(a),bsize=strlen(b),i,temp;
        a[asize]='0',b[bsize]='0';
        asize=asize>bsize?asize:bsize;
        for(i=asize-1;i>=0;i--)
        {
            temp=a[i]+b[i]+c-'0'-'0';
            a[i]=temp%10+'0';
            c=temp/10;
        }
        a[asize]='';
        return c;
    }
    void my_print(char a1[400],char a2[400],int c)
    {
        int a1_len=strlen(a1),a2_len=strlen(a1);
        while(a2[a2_len-1]=='0'&&a2_len)a2_len--;
        if(a1_len==0)a1[0]='0',a1[1]='';
        if(c!=0)
        {
            if(a2_len!=0)
                printf("%d%s.%s
    ",c,a1,a2);
            else
                printf("%d%s
    ",c,a1);
        }
        else
        {
            if(a2_len!=0)
                printf("%s.%s
    ",a1,a2);
            else
                printf("%s
    ",a1);
        }
    }
    int main()
    {
        int n,flag,a1_size,a2_size,b1_size,b2_size,carry;
        char ch;
        scanf("%d",&n);getchar();
        while(n--)
        {
            memset(a1,'0',400);
            memset(a2,'0',400);
            memset(b1,'0',400);
            memset(b2,'0',400);
            a1_size=0,a2_size=0,b1_size=0,b2_size=0;
            a1[0]=a2[0]=b1[0]=b2[0]='';
            flag=0;
            //分别输入a的整数部分和小数部分
            while(1)
            {
                ch=getchar();
                //以空格结束
                if(ch==' '&&flag)
                {
                    a2[a2_size]='';
                    break;
                }
                else if(ch==' '&&!flag)
                {
                    a1[a1_size]='';
                    break;
                }
                else if(ch=='.'){flag=1;a1[a1_size]='';continue;}
                else if(ch!='.'&&!flag)a1[a1_size++]=ch;
                else if(ch!='.'&&flag)a2[a2_size++]=ch;
            }
            //printf("%s.%s
    ",a1,a2);
            flag=0;
            //分别输入b的整数部分和小数部分
            while(1)
            {
                ch=getchar();
                //以换行结束
                if((ch==-1||ch==10||ch==13)&&flag)
                {
                    b2[b2_size]='';
                    break;
                }
                else if((ch==-1||ch==10||ch==13)&&!flag)
                {
                    b1[b1_size]='';
                    break;
                }
                else if(ch=='.'){flag=1;b1[b1_size]='';continue;}
                else if(ch!='.'&&!flag)b1[b1_size++]=ch;
                else if(ch!='.'&&flag)b2[b2_size++]=ch;
            }
            //printf("%s.%s
    ",b1,b2);
            carry=my_add(&a1[0],&b1[0],my_add(&a2[0],&b2[0],0));
            my_print(a1,a2,carry);
        }
        return 0;
    }

    78、A==B?

    #include <stdio.h>
    #include <string.h>
    int main()
    {
    
        char a[1000];
        char b[1000];
        int n,al,bl,pa,pb;
        scanf("%d",&n);
        while(n--)
        {
            int flag=0;
            scanf("%s%s",&a[0],&b[0]);getchar();
            al=strlen(&a[0]);
            bl=strlen(&b[0]);
            pa=pb=0;
            while(a[pa]=='0')pa++;
            while(b[pb]=='0')pb++;
            while(pa<al&&pb<bl)
            {
                if(a[pa]==b[pb])
                {
                    pa++;
                    pb++;
                }
                else
                {
                    flag=1;
                    break;
                }
            }
            if(pa<al&&a[pa]=='.')pa++;
            if(pb<bl&&b[pb]=='.')pb++;
            while(pa<al)if(a[pa++]!='0')flag=1;
            while(pb<bl)if(b[pb++]!='0')flag=1;
            if(flag) printf("NO
    ");
            else printf("YES
    ");
        }
        return 0;
    }

    79、母牛制造的回文

    #include <stdio.h>
    #include <string.h>
    int my_cmp(char a,char b)
    {
        if(a>='A'&&a<='Z')
            a='a'+a-'A';
        if(b>='A'&&b<='Z')
            b='a'+b-'A';
        if(a==b)return 1;
        else return 0;
    }
    void fun(char* s)
    {
        int max_size=0,max_i,max_j;
        int len=strlen(s),size,flag=0;
        char *p,*q;
        int i=0,j=len-1,k;
        //i代表起始位置
        while(i<len)
        {
            if(!((s[i]>='a'&&s[i]<='z')||(s[i]>='A'&&s[i]<='Z')))
            {
                    i++;
                    continue;
            }
            j=len-1;
            //j代表结束位置
            while(j>=i+max_size)
            {
                if(!((s[j]>='a'&&s[j]<='z')||(s[j]>='A'&&s[j]<='Z')))
                {
                    j--;
                    continue;
                }
                p=&s[i],q=&s[j];
                //这里判断回文
                while(p!=q&&q+1!=p)
                {
                    //printf("1 %c %c
    ",*p,*q);
                    if(!((*p>='a'&&*p<='z')||(*p>='A'&&*p<='Z')))
                    {p++;continue;}
                    if(!((*q>='a'&&*q<='z')||(*q>='A'&&*q<='Z')))
                    {q--;continue;}
                    if(!my_cmp(*p,*q))break;
                    //printf("2 %c %c
    ",*p,*q);
                    p++,q--;
                }
                //如果是回文 记录长度
                if(p==q||q+1==p)
                {
                    size=0;
                    //记录长度
                    for(k=i;k<=j;k++)
                    {
                        if((s[k]>='a'&&s[k]<='z')||(s[k]>='A'&&s[k]<='Z'))
                        size++;
                    }
                    //选出最长的一个
                    if(size>max_size)
                    {
                        max_size=size;
                        max_i=i;
                        max_j=j;
                    }
                }
                j--;
            }
            i++;
        }
        printf("%d
    ",max_size);
        for(k=max_i;k<=max_j;k++)
            printf("%c",s[k]);
        printf("
    ");
    }
    int main()
    {
        char ch[20000];
        int size=0;
        while(~scanf("%[^
    ]",&ch[size])&&getchar())
        {
            size=strlen(ch);
            ch[size++]='
    ';
        }
        fun(&ch[0]);
        return 0;
    }

    80、大整数相加

    #include <stdio.h>
    #include <string.h>
    //a为较大的 b为较小的
    int add(char* a,int a_size,char* b,int b_size,char c[2000])
    {
        int carry=0;
        int i=a_size-1,j=b_size-1,temp,size=0;
        while(j>=0)
        {
            temp=a[i]+b[j]-'0'-'0'+carry;
            c[size++]=temp%10+'0';
            carry=temp/10;
            i--,j--;
        }
        while(i>=0)
        {
            temp=a[i]-'0'+carry;
            c[size++]=temp%10+'0';
            carry=temp/10;
            i--;
        }
        while(carry)
        {
            c[size++]=carry%10+'0';
            carry/=10;
        }
        return size;
    }
    int main()
    {
        char a[2000];
        char b[2000];
        char c[2000];
        int n,a_size,b_size,i,j,size;
        scanf("%d",&n);
        for(j=0;j<n;j++)
        {
            scanf("%s",a);
            getchar();
            scanf("%s",b);
            getchar();
            a_size=strlen(a);
            b_size=strlen(b);
            if(a_size>b_size)size=add(a,a_size,b,b_size,&c[0]);
            else size=add(b,b_size,a,a_size,&c[0]);
            printf("Case %d:
    ",j+1);
            for(i=0;i<a_size;i++)printf("%c",a[i]);
            printf(" + ");
            for(i=0;i<b_size;i++)printf("%c",b[i]);
            printf(" = ");
            for(i=size-1;i>0;i--)printf("%c",c[i]);printf("%c
    
    ",c[i]);
        }
        return 0;
    }

    81、十六进制加法

    #include <stdio.h>
    #include <string.h>
    int hex2dec(char ch)
    {
        if(ch>='0'&&ch<='9')return ch-'0';
        else return ch-'a'+10;
    }
    char dec2hec(int n)
    {
        if(n<10) return '0'+n;
        else return 'a'+n-10;
    }
    //a为较大的 b为较小的
    int add(char* a,int a_size,char* b,int b_size,char c[100])
    {
        int carry=0;
        int i=a_size-1,j=b_size-1,temp,size=0;
        while(j>=0)
        {
            temp=hex2dec(a[i])+hex2dec(b[j])+carry;
            c[size++]=dec2hec(temp%16);
            carry=temp/16;
            i--,j--;
        }
        while(i>=0)
        {
            temp=hex2dec(a[i])+carry;
            c[size++]=dec2hec(temp%16);
            carry=temp/16;
            i--;
        }
        while(carry)
        {
            c[size++]=dec2hec(temp%16);
            carry/=10;
        }
        return size;
    }
    int main()
    {
        char a[100];
        char b[100];
        char c[100];
        int n,a_size,b_size,i,j,size;
        scanf("%d",&n);getchar();
        while(n--)
        {
            scanf("%s",a);
            getchar();
            scanf("%s",b);
            getchar();
            a_size=strlen(a);
            b_size=strlen(b);
            if(a_size>b_size)size=add(a,a_size,b,b_size,&c[0]);
            else size=add(b,b_size,a,a_size,&c[0]);
    
            for(i=size-1;i>0;i--)printf("%c",c[i]);printf("%c
    ",c[i]);
        }
        return 0;
    }

    82、纯粹的素数

    #include <stdio.h>
    #include <math.h>
    int isPrimeNumber(int n)
    {
        if(n==1)return 0;
        int i;
        for(i=2;i<=sqrt(n);i++)
            if(n%i==0)return 0;
        return 1;
    } 
    int removeHighest(int n)
    {
        int r=1;
        while(n>=pow(10,r))r++;r--;
        return n%(int)(pow(10,r)+0.5);//这里四舍五入 不然会错
    }
    int isPurePrimeNumber(int n)
    {
        while(n)
        {
            if(!isPrimeNumber(n))return 0;
            n=removeHighest(n);
        }
        return 1;
    }
    int main()
    {
        const int max_num=20;
        int size=0;
        int res[max_num];
        int i=1000;
        while(size<max_num)
        {
            if(isPurePrimeNumber(i))res[size++]=i;
            i++;
        }
        int n;
        while(~scanf("%d",&n))
            printf("%d
    ",res[n-1]);
    
        return 0;
    }

    83、成绩统计

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct stu
    {
        char name[6];
        int math;
        int politics;
    } Stu;
    int cmp(const void* a,const void* b)
    {
        int x=(*(Stu*)a).math;
        int y=(*(Stu*)b).math;
        return x>y?1:-1;
    }
    int main()
    {
        Stu stus[5];
        int i;
        for(i=0;i<5;i++)
            scanf("%s %d %d",&stus[i].name[0],
            &stus[i].math,
            &stus[i].politics);
        for(i=0;i<5;i++)printf("%s %d
    ",stus[i].name,(stus[i].math+stus[i].politics)/2);
        qsort(stus,5,sizeof(Stu),cmp);
        printf("%s %d %d
    ",stus[4].name,stus[4].math,stus[4].politics);
    }

    84、摩托车

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    typedef struct  motor
    {
        char car_type[3];
        char color[10];
        char motor_type[3];
    }Motor;
    int cmp(const void* a,const void* b)
    {
        Motor* pa=(Motor*)a;
        Motor* pb=(Motor*)b;
        return strcmp(pa->car_type,pb->car_type);
    }
    int main()
    {
        Motor motor[100];
        Motor res[21];
        char demand[21][3];
        int n,m,i,j,res_size;
        while(~scanf("%d%d",&n,&m))
        {
            res_size=0;
            getchar();
            for(i=0;i<n;i++)
            {
                scanf("%s",&demand[i]);
                //printf("%s
    ",demand[i]);
                getchar();
            }
            for(i=0;i<m;i++)
            {
                scanf("%s%s%s",&motor[i].car_type,&motor[i].color,&motor[i].motor_type);
                //printf("%s %s %s
    ",motor[i].car_type,motor[i].color,motor[i].motor_type);
                getchar();
            }
            for(i=0;i<n;i++)
            {
                for(j=0;j<m;j++)
                {
                    if(!strcmp(demand[i],motor[j].car_type))
                        res[res_size++]=motor[j];
                }
            }
            qsort(res,res_size,sizeof(Motor),cmp);
            for(i=0;i<res_size;i++)
                printf("%s %s %s
    ",res[i].car_type,res[i].color,res[i].motor_type);
            if(res_size==0)
                printf("Not found!
    ");
        }
        return 0;
    }

    85、扑克牌

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    char COLOR[4]={'S','H','D','C'};
    char SIZE[13]={'A','K','Q','J','T','9','8','7','6','5','4','3','2'};
    typedef struct poker
    {
        char color;
        char size;
    }Poker;
    int getIndex(char* str,char key)
    {
        int len=strlen(str);
        int i;
        for(i=0;i<len;i++)
            if(str[i]==key)return i;
        return -1;
    }
    //结构体二级排序 先排size size相同再排color 
    //返回-1代表a排在b 前面
    int cmp(const void* a,const void* b)
    {
        Poker *pa=(Poker*)a;
        Poker *pb=(Poker*)b;
        int index_a_color=getIndex(COLOR,pa->color);
        int index_b_color=getIndex(COLOR,pb->color);
        int index_a_size=getIndex(SIZE,pa->size);
        int index_b_size=getIndex(SIZE,pb->size);
        if(index_a_size!=index_b_size)
            return index_a_size<index_b_size?-1:1;
        else
            return index_a_color<index_b_color?-1:1;
    }
    int main()
    {
        int n,i,k;
        scanf("%d",&n);
        getchar();
        Poker p[13];
        while(n--)
        {
            for(k=0;k<4;k++)
            {
                for(i=0;i<13;i++)
                {
                    scanf("%c",&p[i].color);
                    scanf("%c",&p[i].size);
                    getchar();
                }
                qsort(p,13,sizeof(Poker),cmp);
                for(i=0;i<12;i++)printf("%c%c ",p[i].color,p[i].size);
                printf("%c%c
    ",p[i].color,p[i].size);
            }
            printf("
    ");
        }
        return 0;
    }

    86、商店购物

    #include <stdio.h>
    #include <string.h>
    typedef struct goods
    {
        int id;
        int num;
        int price;
    }Goods;
    typedef struct discount
    {
        int n;
        int goods[5][2];//0代表编号 1代表数量
        int price;//打折后的价格
        int discount_price;//能省的钱数
    
    }Discount;
    int findGoodsById(Goods goods[25],int goods_size,int id)
    {
        int i;
        for(i=0;i<goods_size;i++)
            if(goods[i].id==id)
                return i;
        return -1;
    }
    //返回当前可获得的最大优惠策略的编号
    int findCurrentMaxDiscount(Goods goods[25],int goods_size,Discount dis[99],int dis_size)
    {
        int i,j,maxDiscount=0,max_id=-1,goods_index;
        for(i=0;i<dis_size;i++)
        {
            for(j=0;j<dis[i].n;j++)
            {
                goods_index=findGoodsById(goods,goods_size,dis[i].goods[j][0]);
                if(dis[i].goods[j][1]>goods[goods_index].num)
                {
                    //printf("i:%d num1:%d num2:%d
    ",i,dis[i].goods[j][1],goods[goods_index].num);
                    break;
                }
            }
            //printf("i:%d j:%d dis[i].n:%d maxDiscount:%d discount_price%d
    ",i,j,dis[i].n,maxDiscount,dis[i].discount_price);
            if(j==dis[i].n&&maxDiscount<dis[i].discount_price)
            {
                max_id=i;
                maxDiscount=dis[i].discount_price;
            }
        }
        //printf("max_id:%d
    ",max_id);
        return max_id;
    }
    void my_print(Goods goods[25],int goods_size,Discount dis[99],int dis_size)
    {
        printf("---------------------------------------
    ");
        int i,j;
        for(i=0;i<goods_size;i++)
        {
            printf("id:%d num:%d price:%d
    ",goods[i].id,goods[i].num,goods[i].price);
        }
        printf("
    ");
        for(i=0;i<dis_size;i++)
        {
            printf("n:%d price:%d discount_price:%d ",dis[i].n,dis[i].price,dis[i].discount_price);
            for(j=0;j<dis[i].n;j++)
            printf("    id:%d num:%d ",dis[i].goods[j][0],dis[i].goods[j][1]);
            printf("
    ");
        }
        printf("---------------------------------------
    ");
    }
    int main()
    {
        int n,i,j,dis_size,goods_size,goods_index;
        Discount dis[99];
        Goods goods[25];
    
        //Init
        /*dis_size=4,goods_size=4;
        dis[0].n=2;dis[0].goods[0][0]=81;dis[0].goods[0][1]=1;
        dis[0].goods[1][0]=62;dis[0].goods[1][1]=1;dis[0].price=149;
    
        dis[1].n=2;dis[1].goods[0][0]=62;dis[1].goods[0][1]=1;
        dis[1].goods[1][0]=113;dis[1].goods[1][1]=1;dis[1].price=147;
    
        dis[2].n=2;dis[2].goods[0][0]=113;dis[2].goods[0][1]=1;
        dis[2].goods[1][0]=34;dis[2].goods[1][1]=1;dis[2].price=77;
    
        dis[3].n=2;dis[3].goods[0][0]=81;dis[3].goods[0][1]=1;
        dis[3].goods[1][0]=34;dis[3].goods[1][1]=1;dis[3].price=75;
    
        goods[0].id=81;goods[0].num=1;goods[0].price=27;
        goods[1].id=62;goods[1].num=2;goods[1].price=135;
        goods[2].id=113;goods[2].num=3;goods[2].price=27;
        goods[3].id=34;goods[3].num=4;goods[3].price=56;*/
    
        scanf("%d",&dis_size);
        for(i=0;i<dis_size;i++)
        {
            scanf("%d",&n);
            dis[i].n=n;
            for(j=0;j<n;j++)
                scanf("%d%d",&dis[i].goods[j][0],&dis[i].goods[j][1]);
            scanf("%d",&dis[i].price);
        }
        scanf("%d",&goods_size);
        for(i=0;i<goods_size;i++)
            scanf("%d%d%d",&goods[i].id,&goods[i].num,&goods[i].price);
    
    
        //初始化discount_price
        for(i=0;i<dis_size;i++)
        {
            int originPrice=0;
            for(j=0;j<dis[i].n;j++)
            {
                goods_index=findGoodsById(goods,goods_size,dis[i].goods[j][0]);
                originPrice+=goods[goods_index].price*dis[i].goods[j][1];
            }
            dis[i].discount_price=originPrice-dis[i].price;
        }
        //my_print(goods,goods_size,dis,dis_size);
        int res=0;
        i=findCurrentMaxDiscount(goods,goods_size,dis,dis_size);
        while(i!=-1)
        {
            //printf("i:%d
    ",i);
            res+=dis[i].price;
            for(j=0;j<dis[i].n;j++)
            {
                goods_index=findGoodsById(goods,goods_size,dis[i].goods[j][0]);
                goods[goods_index].num-=dis[i].goods[j][1];
            }
            //printf("res:%d i:%d
    ",res,i);
            //my_print(goods,goods_size,dis,dis_size);
            i=findCurrentMaxDiscount(goods,goods_size,dis,dis_size);
        }
        for(i=0;i<goods_size;i++)
            res+=goods[i].num*goods[i].price;
        printf("%d
    ",res);
        return 0;
    }

    87、挤牛奶

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        char ch[1000001];
        memset(ch,'0',1000001);
        int min=1000000,max=-1;
        int n,a,b,res_a,res_b,i,flag;
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d%d",&a,&b);
            if(a<min)min=a;
            if(b>max)max=b;
            memset(&ch[a],'1',b-a);
        }
        flag=1;//1代表正在计数有农民挤奶的时刻
        a=0,b=0;//a为挤奶时刻 b为非挤奶
        res_a=0;
        res_b=0;
        for(i=min;i<=max;i++)
        {
            if(ch[i]=='1'&&flag)a++;//挤奶
            else if(ch[i]=='0'&&!flag)b++;//不挤奶
            else if(ch[i]=='0'&&flag)//从有农民挤奶变为无
            {
                b=1;
                if(a>res_a)res_a=a;
                a=0;
                flag=0;
            }
            else //无挤奶变为有挤奶
            {
                a=1;
                if(b>res_b)res_b=b;
                b=0;
                flag=1;
            }
        }
        printf("%d %d
    ",res_a,res_b);
        return 0;
    }

    88、顺序的分数

    #include <stdio.h>
    #include <stdlib.h>
    typedef struct fraction
    {
         int son;
         int mother;
    }Fraction;
    int cmp(const void*a,const void*b)
    {
        double x=(double)(*(Fraction*)a).son/(double)(*(Fraction*)a).mother;
        double y=(double)(*(Fraction*)b).son/(double)(*(Fraction*)b).mother;
        return x-y>0?1:-1;
    }
    //求a,b的最大公约数
    int getGCD(int a,int b)
    {
        int temp;
        int GCD;//最大公约数
        int LCM;//最小公倍数
        int product=a*b;//下面会改变ab的值
        if(a<b) {temp=a;a=b;b=temp;}
        while(1)
        {
           temp=a%b;
           if(!temp)break;
           a=b;
           b=temp;
        }
        GCD=b;
        LCM=product/GCD;//本题无意义
        return  GCD;
    }
    int main()
    {
        int n,i,j;
        int size=0;
        scanf("%d",&n);
        Fraction f[127];
        printf("0/1
    ");
        for(i=1;i<n;i++)
        {
            for(j=n;j>i;j--)
            {
                if(i>=j||getGCD(i,j)!=1)continue;
                f[size].son=i;f[size].mother=j;size++;
            }
        }
        qsort(f,size,sizeof(Fraction),cmp);
        for(i=0;i<size;i++)
            printf("%d/%d
    ",f[i].son,f[i].mother);
        return 0;
    }

    89、分糖果

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <math.h>
    int max=-1;
    int noCarryAdd(int a,int b)
    {
        char stra[10],strb[10];
        itoa(a,stra,2);
        itoa(b,strb,2);
        //printf("%s %s
    ",stra,strb);
        int alen=strlen(stra),blen=strlen(strb),i,r=0,res=0;
        while(alen&&blen)
        {
            stra[alen-1]=(stra[alen-1]+strb[blen-1]-'0'-'0')%2+'0';
            alen--,blen--;
        }
        if(blen){strb[blen]='';strcat(strb,stra),strcpy(stra,strb);}
        alen=strlen(stra);
        for(i=alen-1;i>=0;i--)
        {
            res+=(stra[i]-'0')*(int)(pow(2,r++)+0.5);
        }
        return res;
    }
    //每个数都可能弟弟选 或者 我选
    void select(int a[10],int broVal,int broRealVal,int myVal,int myRealVal,int n,int index)
    {
        //printf("%d %d %d %d
    ",broRealVal,myRealVal,broVal,myVal);
        if(index==n&&(broVal==myVal&&myRealVal>=broRealVal&&broRealVal>0)){if(myRealVal>max)max=myRealVal;return;}
        if(index==n)return ;
        select(a,noCarryAdd(broVal,a[index]),broRealVal+a[index],myVal,myRealVal,n,index+1);
        select(a,broVal,broRealVal,noCarryAdd(myVal,a[index]),myRealVal+a[index],n,index+1);
    }
    int main()
    {
        int n,num,i,a[10];
        scanf("%d",&n);
        while(n--)
        {
            scanf("%d",&num);
            for(i=0;i<num;i++)scanf("%d",&a[i]);
            max=-1;
            select(a,0,0,0,0,num,0);
            if(max==-1)printf("NO
    ");
            else printf("%d
    ",max);
        }
        return 0;
    }

    90、循环数

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        int n,size,temp,i,num,factor,index,flag;
        int arr[10];
        int count[10];
        scanf("%d",&n);
        while(1)
        {
            temp=++n;
            size=0;
            while(temp){arr[size++]=temp%10;temp/=10;}
    
            //判断是否包括0 是否有重复数字
            flag=0;
            memset(count,0,sizeof(int)*10);
            for(i=0;i<size;i++)    
            {
                count[arr[i]]++;
                if(arr[i]==0||count[arr[i]]>1){flag=1;break;}
            }
            if(flag)continue;
            memset(count,0,sizeof(int)*10);
            num=size;
            index=size-1;
            factor=arr[size-1];
            count[size-1]=1;
            while(num)
            {
                //printf("%d %d %d %d
    ",n,num,factor,index);
                if(factor>size)factor-=size;
                index-=factor;
                while(index<0)index+=size;
                if(count[index]==1&&num!=1)break;
                count[index]=1;
                factor=arr[index];
                num--;
            }
            if(num==0&&factor==arr[size-1])
            {
                printf("%d
    ",n);
                break;
            }
        }
      return 0; }

    91、棋盘游戏

    #include <stdio.h>
    #include <string.h>
    #define swap(a,b) do{a=a+b;b=a-b;a=a-b;}while(0) //两个数相同时 会导致结果为0
    //参考 https://www.luogu.com.cn/problemnew/solution/P2739
    //深度优先搜索加剪枝
    //白色的只往右移动
    //黑色的只往左移动
    //移动方式 
    /*
        1、白色的右移到空格
        2、黑色的左移到空格
        3、白色的通过一个黑色的右移到空格
        4、黑色的通过一个白色的左移到空格
    */
    int n,min=168,a[25],flag=0,i,t;
    int temp[210],res[210];
    void dfs(int s,int p,int t)//s为当前步数 p为空格所在的位置 t为最左边的白色的所在的位置
    {
        if(s-1>min)return;
        if(s-1==min&&flag)return ;
        if(p==n+1&&t==n+2)
        {
            min=s-1;flag=1;
            for(i=1;i<=min;i++)res[i]=temp[i];
        }
        //1、白色的右移到空格
        if(p-1>=1&&a[p-1]==1)
        {
            temp[s]=p-1;
            swap(a[p-1],a[p]);
            dfs(s+1,p-1,p-1==t?p:t);
            swap(a[p-1],a[p]);
        }
        //2、黑色的左移到空格
        if(p+1<=2*n+1&&a[p+1]==2)
        {
            temp[s]=p+1;
            swap(a[p+1],a[p]);
            dfs(s+1,p+1,t);
            swap(a[p+1],a[p]);
        }
        //3、白色的通过一个黑色的右移到空格
        if(p-2>=1&&a[p-1]==2&&a[p-2]==1)
        {
            temp[s]=p-2;
            swap(a[p-2],a[p]);
            dfs(s+1,p-2,p-2==t?p:t);
            swap(a[p-2],a[p]);
        }
        //3、黑色的通过一个白色的左移到空格
        if(p+2<=2*n+1&&a[p+2]==2&&a[p+1]==1)
        {
            temp[s]=p+2;
            swap(a[p+2],a[p]);
            dfs(s+1,p+2,t);
            swap(a[p+2],a[p]);
        }
    }
    int main()
    {
        scanf("%d",&n);
        for(i=1;i<=n;i++)
        {
            a[i]=1;
            a[n+1+i]=2;
        }
        a[n+1]=0;
        dfs(1,n+1,1);
        for(i=1;i<=min;i++)
        {
            if(i%20==0||i==min)printf("%d
    ",res[i]);
            else printf("%d ",res[i]);
        }
        return 0;
    }

    92、表达式求值

    #include <stdio.h>
    int fun(char* str)
    {
        int sum=0,size=0,temp=0;
        char f='+';
        char* p=str;
        while(*p!='')
        {
            if(*p==' '){p++;continue;}
            else if(*p=='+'||*p=='-')
            {
                if(f=='+')
                    sum+=temp;
                else
                    sum-=temp;
                temp=0;
                f=*p;
            }
            else temp=temp*10+*p-'0';
            p++;
        }
        if(f=='+')
            sum+=temp;
        else
            sum-=temp;
        return sum;
    }
    int main()
    {
        char ch[1000];
        scanf("%[^
    ]",&ch[0]);
        printf("%d
    ",fun(&ch[0]));
        while(getchar()&&~scanf("%[^
    ]",&ch[0]))
        printf("%d
    ",fun(&ch[0]));
        return 0;
    }

    93、隐藏口令

    #include <stdio.h>
    #include <math.h>
    #include <string.h>
    //数组右移k位相当于翻转前1~n-k;再翻转n-k~n;再翻转1~n
    //左移k为 相当于翻转1~k 再k~n 再1~n
    void Reverse(char* a,int p,int q)
    {
        int temp;
        while(!(p==q)&&!(q+1==p))
        {
            temp=a[p];
            a[p]=a[q];
            a[q]=temp;
            p++,q--;
        }
    }
    void RightShift(char* a,int k,int n)
    {
        Reverse(a,0,n-k-1);
        Reverse(a,n-k,n-1);
        Reverse(a,0,n-1);
    }
    //顺时针移位 左移位
    void LeftShift(char* a,int k,int n)
    {
        Reverse(a,0,k-1);
        Reverse(a,k,n-1);
        Reverse(a,0,n-1);
    }
    int main()
    {
        int size,i;
        char str[100000];
        char str1[100000];
        int res=0;
        scanf("%d",&size);
        int cur_size=0;
        while(cur_size<size)
        {
            scanf("%s",&str[cur_size]);getchar();
            cur_size=strlen(str);
        }
        strcpy(str1,str);
        for(i=1;i<size;i++)
        {
            LeftShift(str,1,size);
            if(strcmp(str,str1)<0)
            {
                strcpy(str1,str);
                res=i;
            }
            //printf("%s %s %d %d
    ",str,str1,res,i);
        }
        printf("%d
    ",res);
        return 0;
    }

    94、分数化小数

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    //参考https://www.luogu.com.cn/problemnew/solution/P1530
    int main()
    {
        int i,n,d,size,z,last_show,count;//n为被除数 d为除数
        char ans[10000];
        char temp[100000];
        int flag[100000];//标记除数是否出现过
        while(~scanf("%d%d",&n,&d))
        {
            size=0,last_show=-1;//同样的被除数数上次出现的位置
            ans[0]='';
            memset(flag,0,100000*sizeof(int));
            
            //处理整数部分
            z=n/d;//整数部分
            if(z==0)ans[size++]='0';
            else
            {
                itoa(z,temp,10);
                strcat(ans,temp);
                size=strlen(ans);
            }
            //加上小数点
            ans[size++]='.';
    
            z=n%d;//产生小数的那部分被除数
            //处理小数部分
            if(z==0)ans[size++]='0';
            else
            {
                while(z)
                {
                    if(flag[z]!=0)//若被除数之前出现过
                    {
                        last_show=flag[z];
                        break;
                    }
                    flag[z]=size;//被除数之前未出现过 标记一次
                    z*=10;
                    ans[size++]='0'+z/d;//
                    z=z%d;//下一个被除数
                }
            }
            if(last_show!=-1)ans[size++]=')';
    
            //输出
            count=0;
            for(i=0;i<size;i++)
            {
                if(i==last_show)
                {
                    printf("(");
                    last_show=-1;
                    i--;
                }
                else printf("%c",ans[i]);
                count++;
                if(count%76==0)printf("
    ");
            }
            printf("
    ");
        }
        return 0;
    }

    95、回文或镜面回文

    #include <stdio.h>
    #include <string.h>
    int isPlalindrome(char* str)
    {
        int size=strlen(str);
        int i=0,j=size-1;
        while(i<j)
        {
            if(str[i]!=str[j])return 0;
            i++,j--;
        }
        return 1;
    }
    int isMirrored(char* str)
    {
        int size=strlen(str);
        int i=0,j=size-1;
        while(i<j)
        {
            if(str[i]=='A'||str[i]=='H'||str[i]=='i'||str[i]=='M'
                ||str[i]=='O'||str[i]=='T'||str[i]=='U'||str[i]=='V'
                ||str[i]=='W'||str[i]=='X'||str[i]=='Y'||str[i]=='1'
                ||str[i]=='0'||str[i]=='8')if(str[i]==str[j]){i++,j--;continue;}
            if((str[i]=='E'&&str[j]=='3')||(str[i]=='3'&&str[j]=='E')){i++,j--;continue;}
            if((str[i]=='J'&&str[j]=='L')||(str[i]=='L'&&str[j]=='J')){i++,j--;continue;}
            if((str[i]=='J'&&str[j]=='L')||(str[i]=='L'&&str[j]=='J')){i++,j--;continue;}
            if((str[i]=='S'&&str[j]=='2')||(str[i]=='2'&&str[j]=='S')){i++,j--;continue;}
            if((str[i]=='Z'&&str[j]=='5')||(str[i]=='5'&&str[j]=='Z')){i++,j--;continue;}
            else
            return 0;
            i++,j--;
        }
        return 1;
    }
    void fun(char* str)
    {
        if(!isPlalindrome(str)&&!isMirrored(str))printf("%s -- is not a palindrome.
    ",str);
        else if(isPlalindrome(str)&&!isMirrored(str))printf("%s -- is a regular palindrome.
    ",str);
        else if(!isPlalindrome(str)&&isMirrored(str))printf("%s -- is a mirrored string.
    ",str);
        else printf("%s -- is a mirrored palindrome.
    ",str);
        printf("
    ");
    }
    int main()
    {
        int i;
        char ch[20];
        scanf("%s",&ch);
        fun(&ch[0]);
        while(getchar()&&~scanf("%s",&ch))fun(&ch[0]);
        return 0;
    }

    1

    分割数字并排序

  • 相关阅读:
    BZOJ3790 : 神奇项链
    BZOJ3630 : [JLOI2014]镜面通道
    BZOJ3738 : [Ontak2013]Kapitał
    个人总结
    mac 下的 top 命令
    去掉Xcode源码末尾的空格
    让UILabel的文字顶部对齐
    使用RBTool自动提交code review请求
    不要在init和dealloc函数中使用accessor
    将textField编辑完内容作为参数发送请求
  • 原文地址:https://www.cnblogs.com/lancelee98/p/12234916.html
Copyright © 2011-2022 走看看