高子越 发表于 2020-6-19 15:52:16

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:22

系统有提供测试数据吗

高子越 发表于 2020-6-19 18:13:45

liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗

有的
输入
3
MaoXiaojie
MengXiaolin
LiXiaoshuo
2
49MaoXiaojie
49MengXiaolin
48LiXiaoshuo
80MengXiaolin
85LiXiaoshuo
83MaoXiaojie
输出   2

高子越 发表于 2020-6-19 18:14:52

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;
}

高子越 发表于 2020-6-19 18:15:54

liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗

在第64 到69行是我写的,可是不对,找到的不是毛小杰的成绩,不知道为啥。

高子越 发表于 2020-6-19 18:17:12

liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗

比如换成这个就不对了
3
MaoXiaojie
MengXiaolin
LiXiaoshuo
2
48 LiXiaoshuo
49 MengXiaolin
49 MaoXiaojie
80 MengXiaolin
85 LiXiaoshuo
83 MaoXiaojie

高子越 发表于 2020-6-19 19:08:41

liuzhengyuan 发表于 2020-6-19 17:53
系统有提供测试数据吗

问题已经解决了,谢谢了

高子越 发表于 2020-6-19 19:09:21

#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]
查看完整版本: c语言成绩查询问题