首先附上我的原码
#include "stdio.h"
#include <math.h>
int main()
{
int n,c;
scanf("%d%d",&n,&c);
if(n<30||n>573)
printf("Input Error");
else
if(30+(int)round(n*0.2)>n)
printf("Input Error");
else
if(c>=1&&c<=10)
printf("First Prize");
else
if(c>=11&&c<=30)
printf("Second Prize");
else
if(c>=31&&c<=30+(int)round(n*0.2))
printf("Third Prize");
else
if(c>=31+(int)round(n*0.2)&&c<=n)
printf("No Prize");
else
printf("Input Error");
return 0;
}
输入的条件为:输入一个整数n,表示新生实际参赛人数。(30<=n<=573)
然后输入一个整数mc,表示某同学在比赛结束后的排名名次
输出条件为:若输入的排名名次为 1 -- 10,输出“First Prize”‘;
若输入的排名名次为 11 -- 30,输出“Second Prize”‘;
若输入的排名名次为 31 -- (30+n*20%),输出“Third Prize”‘; 其中,n*20%的值四舍五入。
若输入的排名名次为 (30+n*20%)+1 -- n,输出“No Prize"; 其中,n*20%的值四舍五入。
若输入的排名名次不合法,输出”Input Error“。
本题的难点就在于细心,可以发现首先给出的参赛人数条件,要考虑到30+(int)round(n*0.2)<n的条件,如果没考虑会出现什么
会发现输出的是“Third Prize” ,因为在考虑到(30<=n<=573)时容易忽略了到n为30时也能正常判断,但在排名为31时,if(c>=31&&c<=30+(int)round(n*0.2))也会正常所以就发生了上面的问题,虽然不是什么难点,但作为初学者还是会容易犯错,比如本人。
本篇是为了让自己发现错误,如果有帮助到您,那么非常荣幸。