杭电ACM1718,为什么不能AC

C语言 码拜 8年前 (2016-04-01) 902次浏览
杭电ACM1718,为什么不能AC
#include <stdio.h>
#include <string.h>
struct stu
{
char num[9];
int score;
};
void main()
{
int n=0,k,rand;
struct stu st[1001],s;
scanf(“%s”,&s.num);
while(1)
{
scanf(“%s %d”,&st[n].num,&st[n].score);
if(strcmp(st[n].num,s.num)==0)
{
s.score=st[n].score;k=n;
}
if(strcmp(st[n].num,”0″)==0&&st[n].score==0)
break;
n++;
}
n–; rand=n;
while(n>=0)
{
if(n!=k&&st[n].score<=s.score)
{
rand–;
}
n–;
}
printf(“%d”,rand+1);
}
看了好多个AC的,他们的都是从1开始排名,而本人的是从最后一位开始排的,求不能AC的原因
解决方案

80

你的字符数组scanf(“%s”,&s.num);都写错了,s.num本来就是地址,还需要取地址吗?应该是scanf(“%d”,s.num); 同时注意题目要求是“多组数据” !这个题目比较简单,本人就不上代码了,来分析一下你的问题!
你的思路是:找出成绩比该人成绩高的人的个数然后再加1。
代码的具体实现可以通过排序(直接sort()最简单),然后再循环遍历找到目标学号所对应的人,根据其下标就可以得出结果!还可以在读入数据的时候,将目标学号对应的分数记下来,然后再循环遍历记录比该人成绩高的学生的个数,然后都出结果!

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明杭电ACM1718,为什么不能AC
喜欢 (0)
[1034331897@qq.com]
分享 (0)