• 选择循环


    例一 高速公路超速处罚 
     

    按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

    输入格式:

    输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

    输出格式:

    在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

    输入样例1:

    65 60
    
     

    输出样例1:

    OK
    
     

    输入样例2:

    110 100
    
     

    输出样例2:

    Exceed 10%. Ticket 200
    
     

    输入样例3:

    200 120
    
     

    输出样例3:

    Exceed 67%. License Revoked
     1 #include<stdio.h>
     2 int main(void)
     3 {
     4   int speed,limit;
     5   double per; 
     6   scanf("%d%d",&speed,&limit);
     7   per=(speed-limit)*100.0/limit;
     8   if(per>=10&&per<50)
     9   {
    10       
    11     printf("Exceed %.lf%%. Ticket 200",per);
    12   }
    13   else if(per>=50)
    14   {
    15     printf("Exceed %.lf%%. License Revoked",per);
    16   }
    17   else
    18     printf("OK");
    19 }
    错误代码:
    1
    #include<stdio.h> 2 int main(void) 3 { 4 int speed,limit,x; 5 scanf("%d%d",&speed,&limit); 6 if(speed>=limit+limit*0.1&&speed<limit+limit*0.5) 7 { 8 x=100*fabs(limit-speed)/limit; 9 printf("Exceed %d%%. Ticket 200",x); 10 } 11 else if(speed>=limit+limit*0.5) 12 { 13 x=100*fabs(limit-speed)/limit; 14 printf("Exceed %d%%. License Revoked",x); 15 } 16 else 17 printf("OK"); 18 }
    总结:主要错误就是没注意题目说的超出的百分之多少用double,不然用整形偏差太大,如13%很容易
    漏掉,注意什么时候用double,什么时候用int及其它。
    例二  求一元二次方程的根 
     

    本题目要求一元二次方程的根,结果保留2位小数。

    输入格式:

    输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

    输出格式:

    根据系数情况,输出不同结果:

    1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

    2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

    3)如果方程只有一个根,则直接输出此根;

    4)如果系数都为0,则输出"Zero Equation";

    5)如果a和b为0,c不为0,则输出"Not An Equation"。

    输入样例1:

    2.1 8.9 3.5
    
     

    输出样例1:

    -0.44
    -3.80
    
     

    输入样例2:

    1 2 3
    
     

    输出样例2:

    -1.00+1.41i
    -1.00-1.41i
    
     

    输入样例3:

    0 2 4
    
     

    输出样例3:

    -2.00
    
     

    输入样例4:

    0 0 0
    
     

    输出样例4:

    Zero Equation
    
     

    输入样例5:

    0 0 1
    
     

    输出样例5:

    Not An Equation
     1 #include<stdio.h>
     2 #include <math.h>
     3 int main(void)
     4 {
     5   double a,b,c,root,x1,x2;
     6   scanf("%lf%lf%lf",&a,&b,&c);
     7   if(a==0&&b==0&&c==0)
     8   {
     9       printf("Zero Equation");
    10   }
    11   else if(a==0&&b==0&&c!=0)
    12   {
    13   printf("Not An Equation");
    14   }
    15   else if(a==0)
    16   {
    17       printf("%.2f\n",-c / b);
    18   }
    19   else
    20   {
    21     root=b*b-4*a*c;
    22   x1=(-b+sqrt(root))/(2*a),x2=(-b-sqrt(root))/(2*a);
    23        if(root>0)
    24   {
    25       printf("%.2lf\n",x1);
    26       printf("%.2lf\n",x2);
    27   }
    28   else if(root<0)
    29   {
    30       printf("%.2f+%.2fi\n%.2f-%.2fi\n",(b == 0 ? b : -b) / (2*a),sqrt(-root) / (2*a),(b == 0 ? b : -b) / (2*a),sqrt(-root) / (2*a));
    31   }
    32   else if(root==0)
    33   {
    34       printf("%.2lf",-b/(2*a));
    35   }
    36   }
    37 }
    注意:这里的?:新内容。
     
    例三 龟兔赛跑 
     

    乌龟与兔子进行赛跑,跑场是一个矩型跑道,跑道边可以随地进行休息。乌龟每分钟可以前进3米,兔子每分钟前进9米;兔子嫌乌龟跑得慢,觉得肯定能跑赢乌龟,于是,每跑10分钟回头看一下乌龟,若发现自己超过乌龟,就在路边休息,每次休息30分钟,否则继续跑10分钟;而乌龟非常努力,一直跑,不休息。假定乌龟与兔子在同一起点同一时刻开始起跑,请问T分钟后乌龟和兔子谁跑得快?

    输入格式:

    输入在一行中给出比赛时间T(分钟)。

    输出格式:

    在一行中输出比赛的结果:乌龟赢输出@_@,兔子赢输出^_^,平局则输出-_-;后跟1空格,再输出胜利者跑完的距离。

    输入样例:

    242
    
     

    输出样例:

    @_@ 726
     
    #include<stdio.h>
    int main(void)
    {
        int T;
        scanf("%d",&T);
        int time,time1;
        int sr=0,st=0;
        int flag=0;
        for(time=1;time<=T;time++)
        {
            time1=0;
            st=st+3;
            if(flag==0)
            {
                sr=sr+9;
            }
            if(time%10==0)
            {
                if(sr>st)
                {
                    while(time1<30&&time1+time<T)
                    {
                        st=st+3;
                        time1++;
                    }
                    time=time+time1;
                }
            }
        }
        if(sr>st)
        printf("^_^ %d",sr);
        else if(st>sr)
        printf("@_@ %d",st);
        else
        printf("-_- %d",st);
    }
    总结:就是一步一步来1:构造循环体2:把相关数据输入st,sr等3:‘过了十分钟后’的结果
    4:输出数据
    错误代码:
    #include<stdio.h> int main(void)
    { int vt=3,vr=9,time; int i=10,sr=0,st=0; scanf("%d",&time); while(i<time) { sr=sr+vr*10,st=st+vt*10; if(sr>st) { st=st+vt*30; i=i+30; } if(i<time) i=i+10; else { st=st-vt*30; i=i-20; break; } } st=st+vt*(time-i); sr=sr+sr*(time-i); if(sr>st) printf("^_^ %d",sr); else if(st>sr) printf("@_@ %d",st); else printf("-_- %d",st); }
    总结:1:不应该用乘10来循环,循环一般都为i++;2:以及分不清while与for什么时候用,这里明显是for;i=1;i<t;i++
    的结构。3:不懂‘过了十分钟后’怎么写代码。
    
    
    例四 找完数
     

    所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。本题要求编写程序,找出任意两正整数m和n之间的所有完数。

    输入格式:

    输入在一行中给出2个正整数m和n(1),中间以空格分隔。

    输出格式:

    逐行输出给定范围内每个完数的因子累加形式的分解式,每个完数占一行,格式为“完数 = 因子1 + 因子2 + ... + 因子k”,其中完数和因子均按递增顺序给出。若区间内没有完数,则输出“None”。

    输入样例:

    2 30
    
     

    输出样例:

    6 = 1 + 2 + 3
    28 = 1 + 2 + 4 + 7 + 14
    #include<stdio.h>
    int main() 
    {
        int n,i,j,m,sum,c=0;//c统计完数个数
        scanf("%d %d",&n,&m);
        for(i=n; i<=m; i++) 
        {
            sum=1;
            for(j=2; j<i; j++) 
            {
                if(i%j==0) 
                {
                    sum=sum+j;
                }
            }
            if(sum==i) 
            {
                c++;
                printf("%d = 1",sum);
                for(j=2; j<i; j++) 
                {
                    if(i%j==0) 
                    {
                        printf(" + %d",j);
    
                    }
                }
                printf("\n");
            }
        }
        if(c==0)
            printf("None");
        return 0;
    }
    总结:自己多练练,实则不难。
     
    例五 水仙花数
     

    水仙花数是指一个N位正整数(N3),它的每个位上的数字的N次幂之和等于它本身。例如:153=13​​+53​​+33。 本题要求编写程序,计算所有N位水仙花数。

    输入格式:

    输入在一行中给出一个正整数N(3<=N<=7)

    输出格式:

    按递增顺序输出所有N位水仙花数,每个数字占一行。

    输入样例:

    3
    
     

    输出样例:

    153
    370
    371
    407
    #include<stdio.h>
    int pow(int a,int b)//注意pow超时问题
    {
        int sum = 1;
        while(b)
        {
            sum *= a;
            b--;
        }
        return sum;
    }
    int main(void) 
    {
        int N,i,j,result=0,sum;
        scanf("%d",&N);
        int min,max;
        min=pow(10,N-1),max=pow(10,N);
        for(i=min;i<max;i++) 
        {
            for(j=i;j>0;j=j/10) 
            {
                sum=j%10;
                result=pow(sum,N)+result;
                
            }
            if(result==i)
            {
                printf("%d\n",i);
            }
            result=0;
        }
    }

     
  • 相关阅读:
    jQuery常用方法一览
    基于jQuery的AJAX和JSON实现纯html数据模板
    jQuery+ASP.NET的AJAX文件上传
    jquery 新建的元素事件绑定问题
    二、visual studio 2008 快捷键
    Sql Server表相关的语句
    使用临时表
    IIS如何启用Gzip压缩功能
    php5.2 的 php.ini 中文版
    joomla笔记——对joomla的初步认识
  • 原文地址:https://www.cnblogs.com/FettersLove/p/12863497.html
Copyright © 2020-2023  润新知