C语言编程 练习题(一)

第一部分

韩信点兵

相传韩信才智过人,从不直接清点自己军队的人数,只要让士兵先后以三人一排、五人一排、七人一排地变换队形,而他每次只掠一眼队伍的排尾就知道总人数了。输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7),输出总人数的最小值(或报告无解)。http://www.1234jk.com已知总人数不小于10,不超过100 。

  • 输入
    输入3个非负整数a,b,c ,表示每种队形排尾的人数(a<3,b<5,c<7)。例如,输入:2 4 5
  • 输出
    输出总人数的最小值(或报告无解,即输出No answer)。实例,输出:89

#include<stdio.h>int main(){    int a;    int b;   int c;    int i;

    

    scanf("%d%d%d",&a,&b,&c);   

    for(i=10;i<=100;i++){       if(i%3==a && i%5==b && i%7==c){           printf("%d\n",i);           break;

        }

    }    

    if(i==101)       printf("No answer\n");    

    

    return 0;

}

兰州烧饼

烧饼有两面,要做好一个兰州烧饼,要两面都弄热。当然,一次只能弄一个的话,效率就太低了。有这么一个大平底锅,一次可以同时放入k个兰州烧饼,一分钟能做好一面。而现在有n个兰州烧饼,至少需要多少分钟才能全部做好呢?

  • 输入
    依次输入n和k,中间以空格分隔,其中1 <= k,n <= 100000
  • 输出
    输出全部做好至少需要的分钟数
  • 提示
    如样例,三个兰州烧饼编号a,b,c,首先a和b,然后a和c,最后b和c,3分钟完成

#include<stdio.h>int main(){    int n;    int k;   int total;    int result;    

    while(scanf("%d%d",&n,&k)!=EOF){

        total=n*2;       

        if(total<k){ //没有考虑到total<k的情况

            printf("2\n");           continue;

        }

        result=total/k;   

        if(total%k!=0)

           result++;        

        printf("%d\n",result);

    }    

    return 0;

}

进制转换

输入一个十进制数N,将它转换成R进制数输出。

  • 输入
    输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
  • 输出
    为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。

#include<stdio.h>int main(){    int number;    int system;

    char s[50];    int i;   int length;    int flag;    

    while((scanf("%d%d",&number,&system))!=EOF){

        i=0;

        flag=0;       

        if(number<0){

           number=-number;

           flag=1;

        }       

        while(number){           if(number%system<=9){               s[i]=(number%system)+'0';

            }           

            else if(number%system==10)               s[i]='A';               

            else if(number%system==11)               s[i]='B';           

            else if(number%system==12)               s[i]='C';               

            else if(number%system==13)               s[i]='D';               

            else if(number%system==14)               s[i]='E';               

            else if(number%system==15)               s[i]='F';

               

           number/=system;

            i++;

        }       length=i;        

        if(flag==1)           printf("-");           

        for(i=length-1;i>=0;i--)           printf("%c",s[i]);           

        printf("\n");

         

    }        

    

    return 0;

}

第几天?

给定一个日期,输出这个日期是该年的第几天。

  • 输入
    输入数据有多组,每组占一行,数据格式为YYYY/MM/DD组成,具体参见sample input ,另外,可以向你确保所有的输入数据是合法的。
  • 输出
    对于每组输入数据,输出一行,表示该日期是该年的第几天。

#include<stdio.h>

 int main(){    int a;    intb;    int c;    int i;    int day[13];   int sum;

    

    day[1]=31;

    day[2]=28;

    day[3]=31;

    day[4]=30;

    day[5]=31;

    day[6]=30;

    day[7]=31;

    day[8]=31;

    day[9]=30;

    day[10]=31;

    day[11]=30;

    day[12]=31;    

    while((scanf("%d/%d/%d",&a,&b,&c))!=EOF){

        sum=0;       

        for(i=1;i<=b-1;i++)

           sum+=day[i];

            

        sum+=c;       

        if((a%400==0 || (a%4==0&& a%100!=0)) && b>=3)

           sum++;            

        printf("%d\n",sum);

    }    

    

    return 0;

}

成绩转换

输入一个百分制的成绩M,将其转换成对应的等级,具体转换规则如下:

90~100为A;
80~89为B;
70~79为C;
60~69为D;
0~59为E;

#include<stdio.h> int main(){    int T;    int n;   char c;    

    scanf("%d",&T);   

    while(T--){       scanf("%d",&n);        

        if(n>=90)

            c='A';           

        else if(n>=80)

            c='B';           

        else if(n>=70)

            c='C';           

        else if(n>=60)

            c='D';           

        else

            c='E';           

        printf("%c\n",c);

    }

    return 0;

}

猜你喜欢

转载自blog.csdn.net/moyouyou123/article/details/80895214