c语言成绩查询问题
毛小杰在丁老师的悉心指导下对学习产生了浓厚的兴趣。他在每次期末考试之后,都会追问丁老师自己在年级的总名次是多少。
考试一多,丁老师也不耐烦了,于是他给了毛小杰所有人的成绩,让他自己去算出自己的年级排名。
可人太多了,毛小杰也无法算出来,于是他想让你帮帮他。
Input
第一行为一个整数N,代表班级的学生总数。
接下来N行,每行一个字符串,代表一个学生的姓名,第一行总是MaoXiaojie。
接下来一行一个整数M,代表一共有M次考试。
每次考试有N行,每行有以一个空格分隔的一个正整数S和一个字符串P,代表名字为P的学生在这次考试中得了S分。
Output
输出一个整数,代表毛小杰在年级的总排名,排名是所有考试总分排名,如果毛小杰和别人并列,毛小杰总是排在前面。
这是我的代码,自己实验了好多结果是对的,但是系统过不去,求助各位大神帮忙看看哪里错了
#include <stdio.h>
#include <string.h>
typedef struct student
{
char name;
int grade;
} stu;
typedef struct students
{
char name1;
} stud;
typedef struct score
{
char name2;
int score;
} scr;
int n,m,i,j,a,b=1,sum;
stud arr1;
stu arr2;
scr arr3;
int main(void)
{
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf("%s", arr1.name1);
}
scanf("%d", &m);
a=n*m;
for(i=0;i<a;i++)
{
scanf("%d%s",&arr2.grade,arr2.name);
}
for(i=0;i<n;i++)
{
for(j=n;j<a;j++)
{
if(strcmp(arr2.name, arr2.name) == 0)
{
sum = arr2.grade + arr2.grade;
arr2.grade = sum;
arr3.score = arr2.grade;
strcpy(arr3.name2,arr2.name);
}
}
}
for (i=0; i<n; i++) {
if(strcmp(arr3.name2, arr1.name1) == 0);
sum = arr3.score;
break;
}
for(i=0;i<n;i++)
{
if (arr3.score>sum)
b=b+1;
}
printf("%d\n",b);
return 0;
}
系统有提供测试数据吗 liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗
有的
输入
3
MaoXiaojie
MengXiaolin
LiXiaoshuo
2
49MaoXiaojie
49MengXiaolin
48LiXiaoshuo
80MengXiaolin
85LiXiaoshuo
83MaoXiaojie
输出 2 liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗
不过我自己又找出了好多问题改了改,现在还有一个问题没有解决,就是如何找到毛小杰的成绩#include <stdio.h>
#include <string.h>
typedef struct student
{
char name;
int grade;
} stu;
typedef struct students
{
char name1;
} stud;
typedef struct score
{
char name2;
int score;
} scr;
int n,m,i,j,a,b=1,sum1,sum2;
/*stud arr1;
stu arr2;
scr arr3;*/
int main(void)
{
scanf("%d", &n);
stud arr1;
for(i=0;i<n;i++)
{
scanf(" %s", arr1.name1);
}
scanf("%d", &m);
a=n*m;
stu arr2;
scr arr3;
for(i=0;i<a;i++)
{
scanf("%d %s",&arr2.grade,arr2.name);
}
if (m>1)
{
for(i=0;i<n;i++)
{
for(j=n;j<a;j++)
{
if(strcmp(arr2.name, arr2.name) == 0)
{
sum1 = arr2.grade + arr2.grade;
arr2.grade = sum1;
arr3.score = arr2.grade;
strcpy(arr3.name2,arr2.name);
}
}
}
}
else
{
for(i=0;i<n;i++)
{
arr3.score = arr2.grade;
strcpy(arr3.name2,arr2.name);
}
}
for (i=0;i<n; i++) {
if(strcmp(arr1.name1,arr3.name2) == 0);
{
sum2 = arr3.score;
break;
}
}
for(i=0;i<n;i++)
{
if (arr3.score>sum2)
b=b+1;
}
for(i=0;i<n;i++)
{
printf("%d %s\n",arr3.score,arr3.name2);
}
for(i=0;i<n;i++)
{
printf("%s\n",arr1.name1);
}
printf("%d %d\n",sum1,sum2);
printf("%d\n",b);
return 0;
}
liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗
在第64 到69行是我写的,可是不对,找到的不是毛小杰的成绩,不知道为啥。 liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗
比如换成这个就不对了
3
MaoXiaojie
MengXiaolin
LiXiaoshuo
2
48 LiXiaoshuo
49 MengXiaolin
49 MaoXiaojie
80 MengXiaolin
85 LiXiaoshuo
83 MaoXiaojie liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗
问题已经解决了,谢谢了 #include <stdio.h>
#include <string.h>
typedef struct student
{
char name;
int grade;
} stu;
typedef struct students
{
char name1;
} stud;
typedef struct score
{
char name2;
int score;
} scr;
int n,m,i,j,a,b=1,sum1,sum2;
stud arr1;
stu arr2;
scr arr3;
int main(void)
{
scanf("%d", &n);
for(i=0;i<n;i++)
{
scanf(" %s", arr1.name1);
}
scanf("%d", &m);
a=n*m;
for(i=0;i<a;i++)
{
scanf("%d %s",&arr2.grade,arr2.name);
}
if (m>1)
{
for(i=0;i<n;i++)
{
for(j=n;j<a;j++)
{
if(strcmp(arr2.name, arr2.name) == 0)
{
sum1 = arr2.grade + arr2.grade;
arr2.grade = sum1;
arr3.score = arr2.grade;
strcpy(arr3.name2,arr2.name);
}
}
}
}
else
{
for(i=0;i<n;i++)
{
arr3.score = arr2.grade;
strcpy(arr3.name2,arr2.name);
}
}
for (i=0;i<n; i++) {
if(strcmp(arr1.name1,arr3.name2) == 0)
{
sum2 = arr3.score;
break;
}
}
for(i=0;i<n;i++)
{
if (arr3.score>sum2)
b=b+1;
}
printf("%d\n",b);
return 0;
}
页:
[1]