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

    do{scanf("%d",&a[index++]);printf("%d
    ",a[index-1]);}while((ch=getchar())!='
    '&&ch!=EOF);//每行不确定有几个输入时

    1、球的体积

    #include <stdio.h>
    int main()
    {
        double PI=3.1415927,r;
        while(scanf("%lf", &r) != EOF)
        {
            double result=(double)4/(double)3*PI*r*r*r;
            printf("%.3f
    ",result);
        }
        return 0;
    }

    2、两点间的距离

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        double x1,y1,x2,y2;
        while(scanf("%lf%lf%lf%lf", &x1,&y1,&x2,&y2) != EOF)
        {
            double result= sqrt(pow(x1-x2,2)+pow(y1-y2,2));
            printf("%.2f",result);
        }
        return 0;
    }

    3、大小写转换

    #include <stdio.h>
    int main()
    {
        char ch;
        scanf("%c",&ch);
        printf("%c
    ",ch+32);
        return 0;
    }

    4、温度转换

    #include <stdio.h>
    int main()
    {
        double c,result;
        while(scanf("%lf",&c)!=EOF)
        {
            result=(double)9/(double)5*c+(double)32;
            printf("%.2f",result);
            printf("0000
    ");
        }
        return 0;
    }

    5、判断奇偶

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            printf("%d ",n);
            if(n%2==0)
                printf("is even
    ");
            else
                printf("is odd
    ");
        }
        return 0;
    }

    6、逆序输出1到4位的正整数

    #include <stdio.h>
    int main()
    {
        int n,temp;
        while(~scanf("%d",&n))
        {
            if(n<=0||n/10000>=1)printf("error!
    ");
            else
            {
                while(n)
                {
                    temp=n%10;
                    printf("%d",temp);
                    n=n/10;
                }
                printf("
    ");
            }
        }
        return 0;
    }

    7、简单加减乘除

    #include <stdio.h>
    int main()
    {
        double a,b;
        int action;
        while(~scanf("%lf%lf%d",&a,&b,&action))
        {
            switch(action)
            {
                case 1:printf("%.2f
    ",a+b);break;
                case 2:printf("%.2f
    ",a-b);break;
                case 3:printf("%.2f
    ",a*b);break;
                case 4:if(b!=0)printf("%.2f
    ",a/b);else printf("error!
    ");break;
            }
        }
        return 0;
    }

    8、字母的前驱或后继

    #include <stdio.h>
    int main()
    {
        char ch;
        scanf("%c",&ch);
        if(ch>='a'&&ch<='a'+12)
            printf("%c
    ",ch+1);
        else printf("%c
    ",ch-1);
        return 0;
    }

    9、门票价格计算

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            if(n<0||n>1000)printf("error!
    ");
            else
            {
                if(n>120) printf("%.2f
    ",n*5*0.7);
                else if(n>80)printf("%.2f
    ",n*5*0.8);
                else if(n>40) printf("%.2f
    ",n*5*0.85);
                else if(n>20) printf("%.2f
    ",n*5*0.9);
                else printf("%.2f
    ",(float)n*(float)5);
            }
        }
        return 0;
    }

    10、星期几问题

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            switch(n)
            {
            case 0:printf("Sunday
    ");break;
            case 1:printf("Monday
    ");break;
            case 2:printf("Tuesday
    ");break;
            case 3:printf("Wednesday
    ");break;
            case 4:printf("Thursday
    ");break;
            case 5:printf("Friday
    ");break;
            case 6:printf("Saturday
    ");break;
            }
        }
        return 0;
    }

    11、时间相加

    #include <stdio.h>
    int main()
    {
        int a1,a2,a3,b1,b2,b3;
        while(~scanf("%d%d%d%d%d%d",&a1,&a2,&a3,&b1,&b2,&b3))
        {
            int sf=0,mf=0;
            a3+=b3;
            if(a3>=60){a3-=60;sf=1;}
            a2=a2+b2+sf;
            if(a2>=60){a2-=60;mf=1;}
            a1=a1+b1+mf;
            printf("%d %d %d
    ",a1,a2,a3);
        }
        return 0;
    }

    12、成绩转换

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            if(n<0||n>100)printf("Score is error!
    ");
            else
            {
                if(n>=90)printf("A
    ");
                else if(n>=80)printf("B
    ");
                else if(n>=70)printf("C
    ");
                else if(n>=60)printf("D
    ");
                else printf("E
    ");
            }
        }
        return 0;
    }

    13、A+B

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

    14、字母的前序或后继

    #include <stdio.h>
    int main()
    {
        char ch;
        while(~scanf("%c",&ch))
        {
            if(!(ch>='a'&&ch<='z'))continue;
            if(ch>='a'&&ch<='a'+12)
            printf("%c
    ",ch+1);
            else printf("%c
    ",ch-1);
        }
        return 0;
    }

    15、幼儿园分班问题

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            if(n<2||n>6)printf("No.
    ");
            else if(n>=5) printf("Three.
    ");
            else if(n>=4) printf("Two.
    ");
            else printf("One.
    ");
        }
        return 0;
    }

    16、门票价格计算(同9)

    17、折纸问题

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

    18、数字之和

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int sum=0;
            while(n)
            {
                sum+=n%10;
                n/=10;
            }
            printf("%d
    ",sum);
        }
        return 0;
    }

    19、约数之和

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

    20、求最高 最低平均分

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int min=100,max=0,sum=0;
            int num;
            for(int i=0;i<n;i++)
            {
                scanf("%d",&num);
                min=min>num?num:min;
                max=max>num?max:num;
                sum+=num;
            }
            printf("%d %d %d
    ",max,min,sum/n);
        }
        return 0;
    }

    21、计算e

    #include <stdio.h>
    __int64 fun(__int64 i)
    {
        if(i==1)return (__int64)1;
        else return (__int64)i*fun(i-1);
    }
    int main()
    {
        double th;
        while(~scanf("%lf",&th))
        {
            if(th>1)
            {
                printf("0.000000 0
    ");
                continue;
            }
            double result=1,cur=1;
            int count=1;
            while(cur>=th)
            {
                result+=cur;
                count++;
                cur=1.0/fun(count);
            }
            printf("%.6f %d
    ",result,count);
        }
        return 0;

    22、工业产值翻倍

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            double cur=100;
            int count=0;
            while(cur<200)
            {
                cur+=cur*n/(double)100;
                count++;
            }
            printf("%d
    ",count);
        }
        return 0;
    }

    23 、SUM

    #include <stdio.h>
    int main()
    {
        int n,num,sum,val;
        while(~scanf("%d",&n))
        {
            while(n--)
            {
                scanf("%d",&num);
                sum=0;
                for(int i=0;i<num;i++)
                {
                    scanf("%d",&val);
                    sum+=val;
                }
                printf("%d
    ",sum);
            }
        }
        return 0;
    }

    24、求素数

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

    25、求最大公约数

    #include <stdio.h>
    int main()
    {
        //辗转相除可求最小公倍数
        //ab的最小公倍数为min 
        //最大公约数为max
        //a*b=min*max
        int n;
        while(~scanf("%d",&n))
        {
            int a,b,min,max,sum,temp;
            while(n--)
            {
                scanf("%d%d",&a,&b);
                sum=a*b;//下面会改变ab的值
                if(a<b) {temp=a;a=b;b=temp;}
                while(1)
                {
                    temp=a%b;
                    if(!temp)break;
                    a=b;
                    b=temp;
                }
                max=b;
                min=sum/max;
                printf("%d
    ",min);
            }
        }
        return 0;
    }

    26、平方和 和 立方和

    #include <stdio.h>
    #include <math.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int a,b,flag,temp;
            double sum1,sum2;
            while(n--)
            {
                sum1=0,sum2=0;
                scanf("%d%d",&a,&b);
                if(a>b){temp=a;a=b;b=temp;}
                flag=a%2;
                for(int i=a;i<=b;i+=2)
                {
                    if(flag)//第一个是奇数
                    {
                        sum2+=pow(i,3);
                        if(i+1<=b)sum1+=pow(i+1,2);
                    }
                    else//第一个是偶数
                    {
                        sum1+=pow(i,2);
                        if(i+1<=b)sum2+=pow(i+1,3);
                    }
                }
                printf("%.0lf %.0lf
    ",sum1,sum2);
            }
        }
        return 0;
    }

    27、统计整数

    #include <stdio.h>
    int main()
    {
        int a[20],count,sum;
        sum=0,count=0;
        for(int i=0;i<20;i++)
        {
            scanf("%d",&a[i]);
            if(a[i]<0)count++;
            sum+=a[i];
        }
        printf("%d %.1f
    ",count,(double)sum/(double)20);
        return 0;
    }

    28、等差数列

    #include <stdio.h>
    int main()
    {
        int n,result;
        while(~scanf("%d",&n))
        {
            result=n*(4+3*(n-1))/2;
            printf("%d
    ",result);
        }
        return 0;
    }

    29、求最晚和最早日期

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int a,b,c;
            int max_a=1,max_b=1,max_c=1;
            int min_a=2015,min_b=12,min_c=31;
            while(n--)
            {
                scanf("%d%d%d",&a,&b,&c);
                if(a>max_a||(a==max_a&&b>max_b)||(a==max_a&&b==max_b&&c>max_c))
                {
                    max_a=a;
                    max_b=b;
                    max_c=c;
                }
                if(a<min_a||(a==min_a&&b<min_b)||(a==min_a&&b==min_b&&c<min_c))
                {
                    min_a=a;
                    min_b=b;
                    min_c=c;
                }
            }
            printf("%d %d %d
    ",max_a,max_b,max_c);
            printf("%d %d %d
    ",min_a,min_b,min_c);
        }
        return 0;
    }

    30、蟠桃记

    #include <stdio.h>
    int main()
    {
        //动态规划
        //第n天吃了1个   总数1   1+n+1=2n  
        //第n-1天吃了3个 总数4     4+n+1=2n
        //第n-2天吃了6个 总数10     10+n+1=2n
        __int64 dp[30];
        dp[1]=1;
        for(int i=2;i<30;i++)
        {
            dp[i]=(dp[i-1]+1)*2;
        }
        int n;
        while(~scanf("%d",&n))
        {
            printf("%I64d
    ",dp[n]);
        }
        return 0;
    }

    31、素数之和(2153未通过 检查不出来错误)

    #include <stdio.h>
    #include <math.h>
    #include <stdbool.h>
    bool isPrimeNumber(int n)
    {
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return false;
        return true;
    }
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int sum,num;
            for(int i=0;i<n;i++)
            {   sum=0;
                scanf("%d",&num);
                for(int i=2;i<=num;i++)
                {
                    if(isPrimeNumber(i))sum+=i;
                }
                printf("%d
    ",sum);
            }
            if(n==32)break;//2153 有34条数据 这个输入错了
        }
        return 0;
    }

    32、完数

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

    33、九九乘法表

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

    34、放大的X

    #include <stdio.h>
    int main()
    {
        int num,n,flag;
        while(~scanf("%d",&num))
        {
            while(num--)
            {
                scanf("%d",&n);
                for(int i=1;i<=n;i++)
                {
                    flag=0;
                    for(int j=1;j<=n;j++)
                    {
                        
                        if(j==i||j==n-i+1){printf("X");flag++;}
                        else printf(" ");
                        if(flag==2||(flag==1&&n%2==1&&2*i-1==n))break;
                    }
                    printf("
    ");
                }
                printf("
    ");
            }
        
        }
        return 0;
    }

    35、空心三角形

    #include <stdio.h>
    int main()
    {
        int num,n,ch,flag;
        scanf("%d",&num);
        while(num--)
        {
                getchar();
                scanf("%c%d",&ch,&n);
                for(int i=1;i<=n;i++)
                {
                        flag=0;
                        for(int j=1;j<=2*n-1;j++)
                        {
                            if(i==1&&j<n)printf(" ");
                            else if(i==1&&j==n){printf("%c",ch);break;}
                            else if(i==n)printf("%c",ch);
                            else if(j==n-i+1||j==n+i-1){printf("%c",ch);flag++;if(flag==2)break;}
                            else printf(" ");
                        }
                        printf("
    ");
                 }
                 printf("
    ");
            
        }
        return 0;
    }

    36、水果价格(C++通过)

    #include <stdio.h>
    #include <iostream>
    using namespace std;
    void my_print(double *p)
    {
        double price[4]={1.5,1.4,1.48,1.08};
        printf("       apple  orange banana pineapple sum
    ");
        printf("price  ");
        int i;
        double temp,sum=0;
        for(i=0;i<4;i++)
        {
            temp=p[i]*price[i];
            sum+=temp;
            if(temp>=10)printf("%.2f  ",temp);
            else printf("%.2f   ",temp);
            if(i==3)printf("   ");//若是pineapple 多加三个空格
        }
        if(sum>=10)printf("%.2f  
    ",sum);
        else printf("%.2f   
    ",sum);
        printf("weight ");
        sum=0;
        for(i=0;i<4;i++)
        {
            sum+=p[i];
            if(p[i]>=10)printf("%.2f  ",p[i]);
            else printf("%.2f   ",p[i]);
            if(i==3)printf("   ");//若是pineapple 多加三个空格
        }
        if(sum>=10)printf("%.2f  
    ",sum);
        else printf("%.2f   
    ",sum);
    }
    int main()
    {
        int n;
        char d;
        double p[4],g; 
        while(~scanf("%d",&n))
        {
            for(int i=0;i<4;i++)p[i]=0;
            while(n--)
            {
                cin>>d>>g;//scanf不会写
                switch(d)
                {
                    case 'a':p[0]+=g;break;
                    case 'o':p[1]+=g;break;
                    case 'b':p[2]+=g;break;
                    case 'p':p[3]+=g;break;
                }
            }
            my_print(p);
            printf("
    ");
        }
        return 0;
    }
    #include <stdio.h>
    int main()
    {
        int N,i;
        char d ;
        double g,price_sum,weight_sum;
        while (~scanf ("%d",&N))
        {
            double a_sum=0.0,o_sum=0.0,b_sum=0.0,p_sum=0.0 ;
            for (i=0 ;i<N ;i++ )
            {
                getchar ();
                scanf ("%c %lf",&d,&g) ;
                if (d=='a') a_sum = a_sum+g ;
                if (d=='o') o_sum = o_sum+g ;
                if (d=='b') b_sum = b_sum+g ;
                if (d=='p') p_sum = p_sum+g ;
            }    
            price_sum = a_sum*1.5+o_sum*1.4+b_sum*1.48+p_sum*1.08 ;
            weight_sum = a_sum+o_sum+b_sum+p_sum ;
            printf ("       apple  orange banana pineapple sum
    ");
            printf ("price  %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f
    ",a_sum*1.5,o_sum*1.4,b_sum*1.48,p_sum*1.08,price_sum) ;//-代表左对齐
            printf ("weight %-7.2f%-7.2f%-7.2f%-10.2f%-7.2f
    ",a_sum,o_sum,b_sum,p_sum,weight_sum) ;//不带-右对齐
            printf ("
    ") ;
        }
        return 0 
    }

    37、奇数的乘积

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

    38、素数表

    #include <stdio.h>
    #include <math.h>
    #include <stdbool.h>
    bool isPrimeNumber(int n)
    {
            if(n==1)return false;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return false;
        return true;
        
    }
    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 ",i);
                    if(count%10==0)printf("
    ");
                }
            }
        }
        return 0;
    }

    39、亲数和

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

    40、分拆素数和

    #include <stdio.h>
    #include <math.h>
    #include <stdbool.h>
    bool isPrimeNumber(int n)
    {
        if(n==1)return false;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return false;
        return true;
        
    }
    int findMaxPrimeNumber(int n,int* a)
    {
        for(int i=0;i<1229;i++)
            if(a[i]>n)
                return i;
    
    }
    int main()
    {
        int cur=0;
        int pr[1228]={0};
        for(int i=2;i<10000;i++)
        {
            if(isPrimeNumber(i))
                pr[cur++]=i;
        }
        int num,n;
        while(~scanf("%d",&num))
        {
            while(num--)
            {
                scanf("%d",&n);
                int max_ind=findMaxPrimeNumber(n,&pr[0]);
                int count=0;
                for(int i=0;i<max_ind;i++)
                {
                    if(i>n/2)break;
                    for(int j=i+1;j<max_ind;j++)
                    {
                        if(pr[i]+pr[j]>n)break;
                        if(pr[i]+pr[j]==n) count++;
                    }
                }
                printf("%d
    ",count);
            }
        }
        return 0;
    }

    41、求斐波拉切数列

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

    42、统计分数

    #include <stdio.h>
    int main()
    {
    
        int n,count;
        double num;
        while(~scanf("%d",&n))
        {
            if(n==0){printf("0");continue;}
            count=0;
            while(n--)
            {
                scanf("%lf",&num);
                if(num<60)count++;
            }
            printf("%d
    ",count);
        }
        return 0;
    }

    43、平均值问题

    #include <stdio.h>
    int main()
    {
        int n,count;
        double num,sum,dp[80];
        while(~scanf("%d",&n))
        {
            count=0,sum=0;
            for(int i=0;i<n;i++)
            {
                scanf("%lf",&num);
                dp[i]=num;
                sum+=num;
            }
            sum=sum/(double)n;
            for(int i=0;i<n;i++)
                if(dp[i]>=sum)count++;
            printf("%.6f %d
    ",sum,count);
        }
        return 0;
    }

    44、统计高于平均分人数

     1 #include <stdio.h>
     2 int main()
     3 {
     4     int index=0,count=0;
     5     double num,sum=0,dp[40]={0};
     6     while(1)
     7     {
     8         scanf("%lf",&num);
     9         if(num<0)break;
    10         dp[index++]=num;
    11         sum+=num;
    12     }
    13     sum=sum/(double)index;
    14     for(int i=0;i<index;i++)
    15         if(dp[i]>sum)count++;
    16     printf("%d
    ",count);
    17     return 0;
    18 }

    45、调换数组

    #include <stdio.h>
    int main()
    {
        int min_index,max_index,n,num,dp[40],temp;
        while(~scanf("%d",&n))
        {
            scanf("%d",&num);
            dp[0]=num;
            min_index=0,max_index=0;
            for(int i=1;i<n;i++)
            {
                scanf("%d",&num);
                dp[i]=num;
                if(dp[min_index]>num)min_index=i;
                if(dp[max_index]<num)max_index=i;
            }
            temp=dp[min_index];
            dp[min_index]=dp[max_index];
            dp[max_index]=temp;
            for(int j=0;j<n-1;j++)
                printf("%d ",dp[j]);
            printf("%d
    ",dp[n-1]);
        }
        return 0;
    }

    46、排序问题

    #include <stdio.h>
    void sort(int a[],int n)
    {
        int flag,temp;
        for(int i=0;i<n-1;i++)
        {
            flag=0;
            for(int j=0;j<n-1;j++)
            {
                if(a[j]<a[j+1])//最小的上浮
                {
                    temp=a[j];
                    a[j]=a[j+1];
                    a[j+1]=temp;
                    flag=1;
                }
            }
            if(flag==0)break;
        }
    }
    int main()
    {
    
        int min_index,max_index,n,num,dp[80],temp;
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d",&num);
                dp[i]=num;
            }
            sort(dp,n);
            for(int j=0;j<n;j++)
                printf("%d ",dp[j]);
            printf("
    ");
        }
        printf("
    ");
        return 0;
    }

    47、奇偶间谍

    #include <stdio.h>
    int isSpy(int a,int b,int c)
    {
        int x=a%2,y=b%2,z=c%2;
        if(x==y&&x==z)return -1;
        if(x==y&&x!=z)return 0;
        if(x==z&&x!=y)return 1;
        if(y==z&&x!=y)return 2;
    
    }
    int main()
    {
        int dp[10];
        int i,index;
        while(~scanf("%d%d%d%d%d%d%d%d%d%d",&dp[0],&dp[1],&dp[2],&dp[3],&dp[4],&dp[5],&dp[6],&dp[7],&dp[8],&dp[9]))
        {
            for(i=2;i<10;i++)
            {
                index=isSpy(dp[i-2],dp[i-1],dp[i]);
                if(index!=-1)
                {
                    printf("%d
    ",dp[i-index]);
                    break;
                }
            }
        }
        return 0;
    }

    48、求质数

    #include <stdio.h>
    #include <math.h>
    #include <stdbool.h>
    bool isPrimeNumber(int n)
    {
        if(n==1)return false;
        for(int i=2;i<=sqrt(n);i++)
            if(n%i==0)return false;
        return true;
        
    }
    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;
    }

    49、卖鸭子

    #include <stdio.h>
    int main()
    {
        //   卖出   剩余  总数
          //7  4       2    (2+1)*2=6
        //6  14-6=8  6    (6+1)*2=14 
        int dp[8],n;
        dp[7]=2;
        for(int i=6;i>0;i--)
        {
            dp[i]=2*(dp[i+1]+1);
        }
        while(~scanf("%d",&n))
        {
            printf("%d %d
    ",2*(dp[n]+1)-dp[n],dp[n]);
        }
        return 0;
    }

    50、十进制转二进制

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

    51、开关灯

    #include <stdio.h>
    int main()
    {
        int n;
        while(~scanf("%d",&n))
        {
            int a[21]={0};
            if(n==1){printf("0
    ");continue;}
            for(int i=2;i<=n;i++)
                for(int j=1;j<=20;j++)
                    if(j%i==0)
                        a[j]=(a[j]==0?1:0);
            for(int k=1;k<=n;k++)
                printf("%d",a[k]);
            printf("
    ");
        }
        return 0;
    }

    52、回文平方数

    #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;
    }
    void printD2R(char *ch,int size)
    {
        for(int j=size;j>=0;j--)
        {
           printf("%c",ch[j]);
        }
    }
    int isAnswer(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 r,size,i,j,size2;
        char ch[1000],ch2[1000];
        scanf("%d",&r);
        __int64 num;
        for(i=1;i<=300;i++)
        {
            num=(__int64)i*(__int64)i;
            size=D2R(num,r,ch);
            if(isAnswer(ch,size))
            {
                size2=D2R(i,r,ch2);
                printD2R(ch2,size2);
                printf(" ");
                printD2R(ch,size);
                printf("
    ");
            }
        }
        return 0;
    }

    53、进制转换

    #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 main()
    {
        char ch[100];
        int n,i,num,r,size;
        while(~scanf("%d",&n))
        {
            while(n--)
            {
                scanf("%d%d",&num,&r);
                size=D2R(num,r,ch);
                for(i=size;i>=0;i--)
                {
                    printf("%c",ch[i]);
                }
                printf("
    ");
            }
        }
        return 0;
    }

    54、删除数组元素

    #include <stdio.h>
    //双指针法 删除指定元素
    void delf(int a[],int* n,int del)
    {
        int i=0,count=0;
        while(i<*n)
        {
            if(a[i]==del)i++;
            else a[count++]=a[i++];
        }
        *n=count;
    }
    int main()
    {
        int n,del,a[100];
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            scanf("%d",&del);
            delf(a,&n,del);
            if(n==0){printf("Empty array!
    ");continue;}
            for(int i=0;i<n-1;i++)
                printf("%d ",a[i]);
            printf("%d
    ",a[n-1]);
        }
        return 0;
    }

    55、删除数组重复元素

    #include <stdio.h>
    //遍历两遍 k是删除完之后的数组大小
    int delf(int a[],int n)
    {
        int i,j,k=0;
        for(i=0;i<n;i++)
        {
            for(j=i+1;j<n&&a[j]-a[i];j++);//检查第i项之后是否有值等于a[i]
            if(j==n)a[k++]=a[i];//若后方没有与a[i]相同的 放入数组中
        }
        return k;
    }
    int main()
    {
        int n,del,a[100];
        while(~scanf("%d",&n))
        {
            for(int i=0;i<n;i++)
                scanf("%d",&a[i]);
            n=delf(a,n);
            for( i=0;i<n-1;i++)
                printf("%d ",a[i]);
            printf("%d
    ",a[n-1]);
        }
        return 0;
    }

    56、循环数组

     1 #include <stdio.h>
     2 //数组右移k位相当于翻转前1~n-k;再翻转n-k~n;再翻转1~n
     3 void Reverse(int* a,int p,int q)
     4 {
     5     int temp;
     6     while(!(p==q)&&!(q+1==p))
     7     {
     8         temp=a[p];
     9         a[p]=a[q];
    10         a[q]=temp;
    11         p++,q--;
    12     }
    13 }
    14 void my_print(int* a,int n)
    15 {
    16    for(int i=0;i<n-1;i++)
    17       printf("%d ",a[i]);
    18     printf("%d
    ",a[n-1]);
    19 }
    20 void RightShift(int* a,int k,int n)
    21 {
    22     Reverse(a,0,n-k-1);
    23     Reverse(a,n-k,n-1);
    24     Reverse(a,0,n-1);
    25 }
    26 int main()
    27 {
    28     int n,k,a[100];
    29     while(~scanf("%d",&n))
    30     {
    31         for(int i=0;i<n;i++)
    32             scanf("%d",&a[i]);
    33         scanf("%d",&k);
    34         RightShift(a,k%n,n);//注意 k%n
    35         my_print(a,n);
    36     }
    37     return 0;
    38 }

    57、菲波那切数列部分和

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

    58、杨辉三角

    #include <stdio.h>
    __int64 fun(__int64 n,__int64 k)//从n开始阶乘k项
    {
        if(k>0) return n*fun(n-1,k-1);
        else return 1;
    }
    __int64 Select(__int64 n,__int64 k)//C k n 选择
    {
        if(k==0||n==0)return 1;
        if(k>n-k)return Select(n,n-k);
        else return  fun(n,k)/fun(k,k);
    }
    int main()
    {
        int n,num;
        while(~scanf("%d",&n))
        {
            while(n--)
            {
                scanf("%d",&num);
                for(int i=0;i<num;i++)
                {
                    for(int j=0;j<i;j++)
                        printf("%I64d ",Select(i,j));
                    printf("1
    ");
                }
                printf("
    ");
            }
        }
        return 0;
    }

    59、数字金字塔

    #include <stdio.h>
    #include <malloc.h>
    void my_print(int** a,int n)
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<i+1;j++)
            {
                printf("%d ",a[i][j]);
            }
            printf("
    ");
        }
    }
    //动态规划 子问题为高为2的金字塔
    void fun(int** a,int n)
    {
        if(n==1) return;
        int i=n-2,j,down,right;
        for(j=0;j<n-1;j++)//求第n-1行 高为2的金字塔 塔顶的最大值 最大值存入第n-1行
        {
            down=a[i][j]+a[i+1][j];
            right=a[i][j]+a[i+1][j+1];
            if(down>=right)a[i][j]=down;
            else a[i][j]=right;
        }
        fun(a,n-1);
    }
    int main()
    {
        int n,max=0,i,j;
        scanf("%d",&n);
        //动态分配内存
        int **a=(int**)malloc(n*sizeof(int*));
        for(i=0;i<n;i++)a[i]=(int*)malloc(n*sizeof(int));
        //输入
        for(i=0;i<n;i++)
        {
            for(int j=0;j<i+1;j++)
            {
                scanf("%d",&a[i][j]);
            }
        }
        fun(a,n);
        printf("%d
    ",a[0][0]);
        return 0;
    }

     60、发牌

    #include <stdio.h>
    int main()
    {
        int a[4][13]={0};//记录花色 0-c,1-d,2-h,3-s
        int b[4][13]={0};//记录大小
        int m=0,n=0;
        for(int i=0;i<4;i++)
        {
            for(int j=0;j<13;j++)
            {
                if(m<=3)
                {
                    a[m][n]=i;
                    b[m][n]=j;
                    m++;
                }
                else if(m==4)
                {
                    m=0;
                    n++;
                    a[m][n]=i;
                    b[m][n]=j;
                    m++;
                }
            }
        }
        int num;
        while(~scanf("%d",&num))
        {
            num--;
            for(int k=0;k<13;k++)
            {
                //0-c,1-d,2-h,3-s
                if(a[num][k]==0)printf("c ");
                else if(a[num][k]==1)printf("d ");
                else if(a[num][k]==2)printf("h ");
                else printf("s ");
                if(k==12)printf("%d
    ",b[num][k]);
                else printf("%d ",b[num][k]);
            }
        }
        return 0;
    }

    61、稀疏矩阵

    #include <stdio.h>
    #include <malloc.h>
    void my_print(int** a,int m,int n)
    {
        for(int i=0;i<m;i++)
        {
            for(int j=0;j<n;j++)
            {
                if(a[i][j]!=0)
                {
                    printf("%d %d %d
    ",i+1,j+1,a[i][j]);
                }
            }
        }
    }
    int main()
    {
        int m,n,i,j;
        while(~scanf("%d%d",&m,&n))
        {
            int** a=(int**)malloc(sizeof(int*)*m);
            for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n);
            for(i=0;i<m;i++)
                for(j=0;j<n;j++)
                    scanf("%d",&a[i][j]);
                    
            my_print(a,m,n);
            printf("
    ");
        }
        return 0;
    }

    62、矩阵问题

    #include <stdio.h>
    #include <malloc.h>
    void my_print(int ** a,int m,int n)
    {
        int i,j;
        for( i=0;i<m;i++)
        {
            for( j=0;j<n-1;j++)
                printf("%d ",a[i][j]);
            printf("%d
    ",a[i][j]);
        }
        for( i=m-2;i>=0;i--)
        {
            for( j=0;j<n-1;j++)
            {
                if(a[i][j]==2)    printf("3 ");
                else printf("%d ",a[i][j]);
            }
            printf("%d
    ",a[i][j]);
        }
    }
    int main()
    {
        int num,m,n,i,j;
        while(~scanf("%d",&num))
        {
            m=num+1;
            n=2*num+1;
            int **a=(int**)malloc(sizeof(int*)*m);
            for(i=0;i<m;i++)a[i]=(int*)malloc(sizeof(int)*n);
            for(i=0;i<m;i++)
                for(j=0;j<n;j++)
                {
                    if(i==j||j==n-i-1)a[i][j]=1;
                    else if(j>i&&j<n-i-1)a[i][j]=2;
                    else if(j<i)a[i][j]=4;
                    else a[i][j]=5;
                }
            my_print(a,m,n);
        }
        return 0;
    }

    63、倒序

    #include <stdio.h>
    #include <string.h>
    void my_print(char* str)
    {
        int len=strlen(str);
        for(int i=len-1;i>=0;i--)printf("%c",str[i]);
        printf("
    ");
    }
    int main()
    {
        int n;scanf("%d",&n);
        char ch[1000];
        while(n--)
        {
            getchar();
            scanf("%[^
    ]",ch);
            my_print(&ch[0]);
        }
        return 0;
    }

    64、统计字母

    #include <stdio.h>
    #include <string.h>
    void my_print(int * result)
    {
        for(int i=0;i<26;i++)
        {
            if(result[i]>0)
                printf("%c:%d
    ",'A'+i,result[i]);
        }
    }
    void fun(char *str,int* result)
    {
        for(int i=0;i<26;i++)result[i]=0;
        char temp;
        while(*str)
        {
            if(*str=='!'){str++;continue;}
            if(*str>='a'&&*str<='z')
                temp=*str-32;
            else temp=*str;
            result[(int)(temp-'A')]++;
            str++;
        }
        my_print(result);
    }
    int main()
    {
        char ch[100];
        int result[26]={0};
        scanf("%s",ch);
        fun(&ch[0],result);
        while(getchar&&~scanf("%s",ch))fun(&ch[0],result);
        return 0;
    }

    65、求小数位数个数

    #include <stdio.h>
    #include <string.h>
    int fun(char* str)
    {
        int flag=0,count=0;
        while(*str)
        {
            if(!flag&&*str=='.')flag=1;
            else if(flag)count++;
            str++;
        }
        return count;
    }
    int main()
    {
        char ch[100];
        scanf("%s",&ch);
        printf("%d
    ",fun(&ch[0]));
        while(getchar()&&~scanf("%s",&ch))printf("%d
    ",fun(&ch[0]));
        return 0;
    }

    66、加密

    #include <stdio.h>
    #include <string.h>
    void fun(char* str)
    {
        char *origin=str;
        while(*str)
        {
            if(*str>='0'&&*str<='9')*str='a'+*str-'0';
            else if(*str>='a'&&*str<='j')*str='0'+*str-'a';
            str++;
        }
        printf("%s
    ",origin);
    }
    int main()
    {
        char ch[100];
        scanf("%s",ch);
        fun(&ch[0]);
        while(getchar&&~scanf("%s",ch))fun(&ch[0]);
        return 0;
    }

    67、求绝对值

    #include <stdio.h>
    #include <string.h>
    void fun(char* str)
    {
        if(*str=='-') printf("%s
    ",str+1);
        else printf("%s
    ",str);
    }
    int main()
    {
        char ch[1000];
        scanf("%s",ch);
        fun(&ch[0]);
        while(getchar&&~scanf("%s",ch))fun(&ch[0]);
        return 0;
    }

    68、请给我加密

    #include <stdio.h>
    #include <string.h>
    void fun(char* str,int key)
    {
        char *origin=str;
        int a[100];
        int size=0,i;
        while(*str)
        {
            if(*str>='a'&&*str<='z')a[size++]=*str-'a'+key+1;
            else if(*str>='A'&&*str<='Z')a[size++]=*str-'A'+key+1;
            else if(*str==' ')a[size++]=0;
            else a[size++]=*str-''+100;
            str++;
        }
        for(i=0;i<size-1;i++)printf("%d ",a[i]);printf("%d
    ",a[i]);
    }
    int main()
    {
        int n,key;
        char ch[1000];
        scanf("%d",&n);
        while(n--)
        {
            getchar();
            scanf("%[^
    ]",&ch);
            getchar();
            scanf("%d",&key);
            fun(&ch[0],key);
        }
        return 0;
    }

    69、进制转换

    #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 main()
    {
        char ch[100];
        int i,num,r,size;
        while(~scanf("%d%d",&num,&r))
        {
            size=D2R(num,r,ch);
            for(i=size;i>=0;i--)
            {
                printf("%c",ch[i]);
            }
            printf("
    ");
        }
        return 0;
    }

    70、日期

    #include <stdio.h>
    #include <string.h>
    //Sun,Mon,Tue,Wed,Thu,Fri,Sat
    char *a[]={"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
    int size=7;
    void fun(char* ch)
    {
        for(int i=0;i<size;i++)
            if(!strncmp(ch,a[i],strlen(ch))){printf("%s
    ",a[i]);break;}
    }
    int main()
    {
        char ch[10];
        scanf("%s",&ch);
        fun(&ch[0]);
        while(getchar()&&~scanf("%s",&ch))
        {
            fun(&ch[0]);
        }
        return 0;
    }

    71、单词统计

    #include <stdio.h>
    #include <string.h>
    int CountWords(char str[])
    {
        int count=0;
        int flag=0;
        while(*str)
        {
            if(*str!=' ')flag=1;
            else if(flag==1&&*str==' '){flag=0;count++;}
            str++;
        }
        return count+flag;
    }
    int main()
    {
        char ch[1000];
        scanf("%[^
    ]",&ch);
        printf("%d
    ",CountWords(&ch[0]));
    }

    72、删除字符

    #include <stdio.h>
    #include <string.h>
    void fun(char* str,char del)
    {
        char *origin=str;
        char *p1=str,*p2=str;
        while(*p2)
        {
            if(*p2==del)p2++;
            else *p1++=*p2++;
            if(*p2=='')*p1='';
        }
        printf("%s",origin);
    }
    int main()
    {
        char ch[20],del;
        scanf("%[^
    ]",&ch);
        getchar();
        scanf("%c",&del);
        fun(&ch[0],del);
    }

    73、手机短号

    #include <stdio.h>
    #include <string.h>
    void fun(char* str)
    {
        printf("6");
        for(int i=6;i<11;i++)
            printf("%d",str[i]-'0');
        printf("
    ");
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        char a[13];
        for(int i=0;i<n;i++)
        {
            getchar();
            scanf("%s",a);
            fun(&a[0]);
        }
    }

    74、字符串统计

    #include <stdio.h>
    #include <string.h>
    void fun(char* str)
    {
        int count=0;
        while(*str)
        {
            if(*str>='a'&&*str<='z')count++;
            str++;
        }
        printf("%d
    ",count);
    }
    int main()
    {
        int n;
        scanf("%d",&n);
        char ch[1000];
        while(n--)
        {
            getchar();
            scanf("%s",&ch);
            fun(&ch[0]);
        }
        return 0;
    }

    75、弟弟的作业

    #include <stdio.h>
    #include <string.h>
    int fun(char* str)
    {
        int a=0,b=0,c=0,flag=0;
        char f;
        while(*str)
        {
            if(!flag&&*str>='0'&&*str<='9')a=a*10+*str-'0';
            else if(!flag&&(*str=='+'||*str=='-'))flag=1,f=*str;
            else if(flag==1&&*str>='0'&&*str<='9')b=b*10+*str-'0';
            else if(*str=='=')flag=2;
            else if(flag==2&&*str>='0'&&*str<='9')c=c*10+*str-'0';
            str++;
        }
        if((f=='+'&&a+b==c)||(f=='-'&&a-b==c))return 1;
        else return 0;
    }
    int main()
    {
        int count=0;
        char ch[1000];
        scanf("%s",&ch);
        count+=fun(&ch[0]);
        while(getchar()&&~scanf("%s",&ch))count+=fun(&ch[0]);
        printf("%d
    ",count);
        return 0;
    }

    76、字符串排序

    #include <stdio.h>
    #include <string.h>
    char* fun(char* str)
    {
        int size=strlen(str);
        int i,j,flag;
        char temp;
        for(i=0;i<size-1;i++)
        {
            flag=0;
            for(j=1;j<size-i;j++)
            {
                if(str[j-1]>str[j])
                {
                    temp=str[j-1];
                    str[j-1]=str[j];
                    str[j]=temp;
                    flag=1;
                }
            }
            if(!flag)break;
        }
        return str;
    }
    int main()
    {
        int count=0;
        char ch[1000];
        scanf("%s",&ch);
        printf("%s
    ",fun(&ch[0]));
        while(getchar()&&~scanf("%s",&ch))printf("%s
    ",fun(&ch[0]));
        return 0;
    }

    77、回文问题

    #include <stdio.h>
    #include <string.h>
    char* fun(char* str)
    {
        int size=strlen(str);
        int i=0,j=size-1;
        while(i<j)
        {
            if(str[i]!=str[j]) return "No";
            i++,j--;
        }
        return "Yes";
    }
    int main()
    {
        char ch[200];
        scanf("%s",&ch);
        printf("%s
    ",fun(&ch[0]));
        while(getchar()&&~scanf("%s",&ch))printf("%s
    ",fun(&ch[0]));
        return 0;
    }

    78、字符串中找整数

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    int m=20;
    int n=50;
    void fun(char* str)
    {
        int size=0,i;
        char** str1=(char**)malloc(sizeof(char*)*m);
        for(i=0;i<10;i++)str1[i]=(char*)malloc(sizeof(char)*n);
        while(*str)
        {
            if(*str>='0'&&*str<='9')
            {
                int count=0;
                char* temp=str;
                while(*str>='0'&&*str<='9')count++,str++;
                strncpy(str1[size],temp,count);
                str1[size++][count]='';
            }
            str++;
        }
        //将0开头的0去掉
        for(i=0;i<size;i++)
        {
            if(*str1[i]=='0')
            {
                char *p=str1[i];
                while(*p=='0')p++;
                strcpy(str1[i],p);
            }
        }
    
        if(size>0)
        {
            printf("%d ",size);
            for(i=0;i<size-1;i++)printf("%s ",str1[i]);printf("%s
    ",str1[i]);
        }
        else printf("%d
    ",size);
    }
    int main()
    {
        int i;
        char ch[500];
        scanf("%s",&ch);
        fun(&ch[0]);
        while(getchar()&&~scanf("%s",&ch))fun(&ch[0]);
        return 0;
    }

    79、子字符串排序

    #include <stdio.h>
    #include <string.h>
    #include <malloc.h>
    void sort(char** str,int size)
    {
    
        int i,j,flag;
        char temp[10];
        for(i=0;i<size-1;i++)
        {
            flag=0;
            for(j=1;j<size-i;j++)
            {
                if(strcmp(str[j-1],str[j])>0)
                {
                
                    strcpy(temp,str[j]);
                    strcpy(str[j],str[j-1]);
                    strcpy(str[j-1],temp);
                    flag=1;
                }
            }
            if(!flag)break;
        }
    }
    void fun(char* str)
    {
        int size=0,i;
        char** str1=(char**)malloc(sizeof(char*)*10);
        for(i=0;i<10;i++)str1[i]=(char*)malloc(sizeof(char)*10);
        while(*str)strcpy(str1[size++],str),str++;
        sort(str1,size);
        for(i=0;i<size;i++)printf("%s
    ",str1[i]);
    }
    int main()
    {
        int i;
        char ch[100];
        scanf("%s",&ch);
        fun(&ch[0]);
        while(getchar()&&~scanf("%s",&ch))fun(&ch[0]);
        return 0;
    }

    80、平均分

    #include <stdio.h>
    #include <malloc.h>
    typedef struct Student
    {
        int num;
        char name[20];
        int year;
        int month;
        float grade1;
        float grade2;
        float grade3;
    }Stu;//使用typedef后 Student是别名 Stu是结构体名 可以不用struct Stu声明 可直接用Stu声明
    int main()
    {
        int n,i;
        scanf("%d",&n);
            Stu *stus=(Stu*)malloc(sizeof(Stu)*n);
            for(i=0;i<n;i++)
            {
                scanf("%d%s%d%d%f%f%f",
                    &stus[i].num,
                    &stus[i].name,
                    &stus[i].year,
                    &stus[i].month,
                    &stus[i].grade1,
                    &stus[i].grade2,
                    &stus[i].grade3);
            }
            for(i=0;i<n;i++)
            {
                printf("%d %s %d/%d %.0f %.0f %.0f %.0f
    ",
                    stus[i].num,
                    stus[i].name,
                    stus[i].year,
                    stus[i].month,
                    stus[i].grade1,
                    stus[i].grade2,
                    stus[i].grade3,
                    (stus[i].grade1+stus[i].grade2+stus[i].grade3)/(float)3);
            }
        return 0;
    }

    81、统计候选人的票数

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    typedef struct my_candidate
    {
        char* name;
        int result;
    }Candidate;
    void my_print(Candidate *c,int count)
    {
        printf("li:%d
    ",c[1].result);
        printf("zhang:%d
    ",c[0].result);
        printf("wang:%d
    ",c[2].result);
        printf("Wrong election:%d
    ",count);
    }
    char tolower(char c)//转化小写这一步没必要 测试里没有大写
    {
        if(c>='A'&&c<='Z')
            return c+32;
        else return c;
    }
    char* strlowr(char* s)
    {
        char *origin=s;
        for(;*s!='';s++)
        {
            *s=tolower(*s);
        }
        return origin;
    }
    int main()
    {
        char s[20],*s1;
        int i,count=0;
        Candidate candidate[3];
        candidate[0].name="zhang";candidate[0].result=0;
        candidate[1].name="li";candidate[1].result=0;
        candidate[2].name="wang";candidate[2].result=0;
        for(i=0;i<10;i++)
        {
            scanf("%s",&s);
            s1=strlowr(&s[0]);
            if(!strcmp(s1,"zhang"))candidate[0].result++;
            else if(!strcmp(s1,"li"))candidate[1].result++;
            else if(!strcmp(s1,"wang"))candidate[2].result++;
            else count++;
        }
        my_print(candidate,count);
        return 0;
    }

    82、密码分析(c++)

    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    typedef struct word
    {
        char ch;
        int count;
    }Word;
    void sort(Word* word)
    {
        int size=26;
        int i,j,flag;
        for(i=0;i<size-1;i++)
        {
            flag=0;
            for(j=1;j<size-i;j++)
            {
                if(word[j-1].count<word[j].count)swap(word[j-1],word[j]),flag=1;
            }
            if(!flag)break;
        }
    }
    void fun(char* str,Word* word)
    {
        int i;
        for(i=0;i<26;i++){word[i].ch='A'+i;word[i].count=0;}
        while(*str)
        {
            if(*str>='a'&&*str<='z')word[*str-'a'].count++;
            else if(*str>='A'&&*str<='Z')word[*str-'A'].count++;
            str++;
        }
        sort(word);
        for(i=0;i<26;i++)
        {
            if(word[i].count==0)break;
            printf("%c %d
    ",word[i].ch,word[i].count);
        }
        printf("
    ");
    }
    int main()
    {
        int i;
        Word word[26];
        char ch[100];
        scanf("%[^
    ]",&ch);
        fun(&ch[0],word);
        while(getchar()&&~scanf("%[^
    ]",&ch))fun(&ch[0],word);
        return 0;
    }

    83、学生信息(c++)

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    typedef struct my_stu
    {
        int num;
        char name[20];
        char sex[10];
        int age;
        int grade;
    }Stu;
    void my_print(Stu* stus,int n)
    {
        for(int i=0;i<n;i++)
        {
            printf("%d %s %s %d %d
    ",stus[i].num,stus[i].name,stus[i].sex,stus[i].age,stus[i].grade);
        }
    }
    void sort(Stu* stus,int n)
    {
        int flag;
        for(int i=0;i<n-1;i++)
        {
            flag=0;
            for(int j=1;j<n-i;j++)
            {
                if(stus[j-1].grade>stus[j].grade){swap(stus[j-1],stus[j]);flag=1;}
            }
            if(!flag)break;
        }
    }
    int main()
    {
        Stu stus[10];
        int n,i;
        scanf("%d",&n);
        for(i=0;i<n;i++)
            scanf("%d%s%s%d%d",&stus[i].num,&stus[i].name,&stus[i].sex,&stus[i].age,&stus[i].grade);
        sort(&stus[0],n);
        my_print(&stus[0],n);
        return 0;
    }

    84、求级数的和

    #include <stdio.h>
    #include <math.h>
    double fun(double n)
    {
        if(n!=1)return n*fun(n-1);
        else return 1;
    }
    double fun2(double x,int n)
    {
        double re=pow(x,n)/fun(n);
        if(re>0.000001) 
        {
            if(n%2==1) return re+fun2(x,n+1);
            else return -re+fun2(x,n+1);
        }
        else return 0;
    }
    int main()
    {
        double x;
        scanf("%lf",&x);
        printf("%.6f
    ",fun2(x,1)+1);
        return 0;
    }

    85、计算多项式的值

    #include <stdio.h>
    #include <math.h>
    double fun(double n)
    {
        if(n!=1)return n*fun(n-1);
        else return 1;
    }
    double fun1(int n)
    {
        double re=0.5;
        for(int i=1;i<n;i++)
            re*=(0.5-i);
        return re;
    }
    double fun2(double x,double th,int n)
    {
        double re=(pow(x,n)*fun1(n))/fun(n);
        if((re>0&&re>=th)||(re<0&&-re>=th)) 
            return re+fun2(x,th,n+1);
        else return 0;
    }
    int main()
    {
        double x,th;
        while(~scanf("%lf%lf",&x,&th))
        {
            double re;
            if(th>1) re=0;
            else re=fun2(x,th,1)+1;
            printf("%.6f
    
    ",re);
        }
        return 0;
    }

    86、母牛的数量

    #include <stdio.h>
    #include <math.h>
    //第几年 母牛数量
    //1      1
    //2      1+1
    //3      2+1
    //4      3+1
    //5      4+2 此时第二个年头所有的牛都能生了
    //6      6+3 此时第三个年头所有的牛都能生了
    //n<=4 fun(n)=5 ;n>5 fun(n)=fun(n-1)+fun(n-3);
    __int64 fun(int n)//递归会超时 
    {
        if(n<=4)return n;
        else return fun(n-1)+fun(n-3);
    }
    int main()
    {
        __int64 dp[55];
        dp[1]=1;
        dp[2]=2;
        dp[3]=3;
        dp[4]=4;
        for(int i=5;i<55;i++)
            dp[i]=dp[i-1]+dp[i-3];
        int n,year;
        while(~scanf("%d",&n))
        {
            int a=1,b=0;//a 代表成熟的母牛数量 b代表
            while(n--)
            {
                scanf("%d",&year);
                printf("%I64d
    ",dp[year]);
            }
        }
        return 0;
    }

     87、发工资咯

    #include <stdio.h>
    int fun(int sum)
    {
        int result=0;
        while(sum)
        {
            if(sum>=100){result+=sum/100;sum=sum%100;}
            else if(sum<100&&sum>=50){result+=sum/50;sum=sum%50;}
            else if(sum<50&&sum>=20){result+=sum/20;sum=sum%20;}
            else if(sum<20&&sum>=10){result+=sum/10;sum=sum%10;}
            else if(sum<10&&sum>=5){result+=sum/5;sum=sum%5;}
            else if(sum<5&&sum>=2){result+=sum/2;sum=sum%2;}
            else {result+=sum;sum=0;}
        }
        return result;
    }
    int main()
    {
        int N,n,sum,salary,result;
        scanf("%d",&N);
        while(N--)
        {
            sum=0;result=0;
            scanf("%d",&n);
            while(n--)
            {
                scanf("%d",&salary);
                sum+=fun(salary);
            }
            printf("%d
    ",sum);
        }
        return 0;
    }

    88、你要乘坐的飞碟在这里(1923未通过)

    #include <stdio.h>
    int fun(char* str)
    {
        int result=1;
        int temp;
        while(*str!='')
        {
            temp=*str-'A'+1;
            result*=temp;
            str++;
        }
        return result;
    }
    int main()
    {
        char a[6],b[6];
        scanf("%s",a);getchar();
        scanf("%s",b);
        if(fun(&a[0])%47==fun(&b[0])%47)
            printf("GO
    ");
        else printf("STAY
    ");
        return 0;
    }

    89、字符串压缩

    #include <stdio.h>
    #include <string.h>
    char tolower(char c)//转化小写
    {
        if(c>='A'&&c<='Z')
            return c+32;
        else return c;
    }
    char* strlowr(char* s)
    {
        char *origin=s;
        for(;*s!='';s++)
        {
            *s=tolower(*s);
        }
        return origin;
    }
    //双指针 第一个指针为当前大小 第二个指针为工作指针 
    char *strcompress(char* str)
    {
        char* head=str;
        char *p1=str,*p2=str;
        int count=1;
        while(*(p2)!='')
        {
            if(*(p2+1)!=''&&*(p2+1)==*p2)//后一个与前一个相同
                count++,p2++;
            else
            {
                if(count!=1)*(p1++)='0'+count,count=1;
                *(p1++)=*(p2++);
                if(*p2=='')*p1='';
            }
        }
        return head;
    }
    int main()
    {
        //char* test="a"存储第一个字符a的地址 但是是只读的
        //char test[]="a" 可修改
        char ch[1000];
        scanf("%s",&ch);
        printf("%s
    ",strcompress(strlowr(&ch[0])));
        while(getchar()&&~scanf("%s",&ch))printf("%s
    ",strcompress(strlowr(&ch[0])));
        return 0;
    }

    90、选票统计

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    typedef struct my_candidate
    {
        char name[20];
        int result;
    }Candidate;
    char tolower(char c)//转化小写
    {
        if(c>='A'&&c<='Z')
            return c+32;
        else return c;
    }
    char* strlowr(char* s)
    {
        char *origin=s;
        for(;*s!='';s++)
        {
            *s=tolower(*s);
        }
        return origin;
    }
    int find(Candidate* c,int size,char* s)
    {
        for(int i=0;i<size;i++)
            if(!strcmp(c[i].name,s))return i;
        return -1;
    }
    int main()
    {
        char s[20],*s1,size=0,target,max_index=0,i;
        Candidate* candidate=(Candidate*)malloc(sizeof(Candidate)*100);
        for(i=0;i<100;i++)candidate[i].result=0;
    
        scanf("%s",&s);s1=strlowr(&s[0]);
        strcpy(candidate[0].name,s1);
        candidate[0].result=1;
        size++;
    
        while(getchar()&&~scanf("%s",&s))
        {
            target=find(candidate,size,strlowr(&s[0]));
            if(target==-1){strcpy(candidate[size].name,strlowr(&s[0]));candidate[size].result=1;size++;}
            else
            {
                candidate[target].result++;
                if(target!=max_index&&candidate[target].result>candidate[max_index].result)max_index=target;
            }
        }
        printf("%s %d
    ",candidate[max_index].name,candidate[max_index].result);
        return 0;
    }

    91、数星星

    #include <stdio.h>
    #include <malloc.h>
    typedef struct point
    {
        int x;
        int y;
    }Point;
    int find(Point* p,int n,int x,int y)
    {
        for(int i=0;i<n;i++)
            if(p[i].x==x&&p[i].y==y) return 1;
        return 0;
    }
    int main()
    {
    
        int n,a,b,i,size=0;
        scanf("%d",&n);
        Point* p=(Point*)malloc(sizeof(Point)*n);
        for(i=0;i<n;i++){p[i].x=p[i].y=10001;}
        while(n--)
        {
            scanf("%d%d",&a,&b);
            if(!find(p,size,a,b))
            {
                p[size].x=a;
                p[size].y=b;
                size++;
            }
            else continue;
        }
        printf("%d
    ",size);
        return 0;
    }

    92、按出生日期排序

    #include <stdio.h>
    #include <malloc.h>
    #include <iostream>
    using namespace std;
    typedef struct student
    {
        char name[10];
        int birth[3];
    }Stu;
    void my_print(Stu* stu,int n)
    {
        for(int i=0;i<n;i++)
        {
            printf("%s %d-",stu[i].name,stu[i].birth[0]);
            if(stu[i].birth[1]<10)printf("0%d-",stu[i].birth[1]);
            else printf("%d-",stu[i].birth[1]);
            if(stu[i].birth[2]<10)printf("0%d
    ",stu[i].birth[2]);
            else printf("%d
    ",stu[i].birth[2]);
        }
    }
    void sort(Stu* stu,int n)
    {
        int flag,i,j;
        for(int k=2;k>=1;k--)
        {
            for(i=0;i<n-1;i++)
            {
                flag=0;
                for(j=1;j<n-i;j++)
                {
                    if(stu[j].birth[k]<stu[j-1].birth[k])
                    {
                        swap(stu[j],stu[j-1]);
                        flag=1;
                    }
                }
            if(!flag)break;
            }
        }
    }
    int main()
    {
        int n,i;
        scanf("%d",&n);
        Stu* stu=(Stu*)malloc(sizeof(Stu)*n);
        for(i=0;i<n;i++)
            scanf("%s%d%d%d",&stu[i].name,&stu[i].birth[0],&stu[i].birth[1],&stu[i].birth[2]);
        sort(stu,n);
        my_print(stu,n);
        return 0;
    }

    93、考试排名(c++)

    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>
    #include <iostream>
    using namespace std;
    typedef struct student
    {
        char name[10];
        int AC_num;
        int time;
    }Stu;
    int compute(char* ch,int score)
    {
        if(*ch=='0'||*ch=='-')return 0;
        int a=0,b=0,flag=0;
        for(;*ch!='';ch++)
        {
            if(*ch=='('){flag=1;continue;}
            else if(!flag) a=a*10+(int)(*ch-'0');
            else if(flag&&*ch!=')')b=b*10+(int)(*ch-'0');
            else break;
        }
        return a+b*score;
    }
    void sort(Stu* stu,int size)
    {
        int i,j,k,flag;
        for(k=0;k<3;k++)
        {
            for(i=0;i<size-1;i++)
            {
                flag=0;
                for(j=1;j<size-i;j++)
                {
                    if((k==0&&strcmp(stu[j-1].name,stu[j].name)>0)||
                        (k==1&&stu[j-1].time>stu[j].time)||
                        (k==2&&stu[j-1].AC_num<stu[j].AC_num))
                    {swap(stu[j-1],stu[j]);flag=1;}
                }
                if(!flag)break;
            }
        }
    }
    int main()
    {
        int size=0,num,score,i,result;
        char name[10];
        Stu* stu=(Stu*)malloc(sizeof(Stu)*100);
        for(i=0;i<100;i++){stu[i].AC_num=stu[i].time=0;}
        scanf("%d%d",&num,&score);
        char ch[12][10];
        while(getchar()&&~scanf("%s",&name))
        {
            strcpy(stu[size].name,name);
            for(i=0;i<num;i++)
            {
                scanf("%s",&ch[i]);
                result=compute(&ch[i][0],score);
                if(result>0)
                {
                    stu[size].AC_num+=1;
                    stu[size].time+=result;
                }
            }
            size++;
        }
        sort(stu,size);
        for(i=0;i<size;i++)printf("%-10s %2d %4d
    ",stu[i].name,stu[i].AC_num,stu[i].time);
        return 0;
    }

    .

  • 相关阅读:
    年度回忆录(?——2011.01)
    我在学英语
    技能冷却
    抗锯齿
    在cocos2dx 2.x FPS 等参数
    手指效果
    cocos2dx 简单OpenGL 画图
    cocos2dx tile map瓦片地图的黑线及地图抖动解决方案
    C++操作SQLite数据库
    精灵点击移动
  • 原文地址:https://www.cnblogs.com/lancelee98/p/12178359.html
Copyright © 2011-2022 走看看