按照规定,在高速公路上行使的机动车,达到或超出本车道限速的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位正整数(N≥3),它的每个位上的数字的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;
}
}