Spperman


私信TA

用户名:fan

访问量:10600

签 名:

优秀的程序员是没有女朋友的...

排  名 32
经  验 5073
参赛次数 0
文章发表 65
年  龄 19
在职情况
学  校 河南师范大学
专  业 物联网

  自我简介:

单身是因为——太优秀了...

解题思路:

注意事项:


思路我觉得没问题,希望同学们可以帮我看看哪里有问题,提交不过是因为什么?



参考代码:

#include<stdio.h>
#include<string.h>
typedef struct
{
    char name[35];
    int score[100];
    int num;

}Student;                                      //学生信息成绩(数组表示几次的考试成绩),名字


char c[5]="DaDa";                       //定义全局变量,表示name:  DaDa


void sort1(int n,Student a[],int s)            //函数排序,比较分数,分数大的排在前面
{
    int i,j,k;
    Student temp;                                    //s是第s+1次的某位同学的成绩
    for(i=0;i<n-1;i++)
    {
        k=i;
        for(j=i+1;j<n;j++)
        {
            if(a[k].score[s]==a[j].score[s]&&strcmp(a[j].name,c)==0)      //如果成绩和DaDa相同,达达名次靠前
            {
                k=j;
                continue;
            }
            if(a[k].score[s]<a[j].score[s])                       //正常情况下的排序
            {
                k=j;
            }
        }
        if(k!=i)
        {
            /*temp.score[s]=a[i].score[s];                     
            a[i].score[s]=a[k].score[s];
            a[k].score[s]=temp.score[s];*/

                                                                     //这里要对结构体student 对象a数组进行排序

                                                                    //不能只对score数据成员交换排序,这样会把别人的成绩变成你的
            temp=a[i];
            a[i]=a[k];
            a[k]=temp;

        }
    }
}


int main()
{
    int n,m,i,j,k,score=0;
    char str[35];

    Student a[105];
    scanf("%d",&n);
    for(i=0;i<n;i++)
    {
        scanf("%s",a[i].name);
        //a[i].sum=0;
        getchar();                          //吸收回车符
    }
    scanf("%d",&m);


for(j=0;j<m;j++)                       //m次考试
{
        for(i=0;i<n;i++)                // 输入成绩与名字去k=0循环中寻找匹配的人,将成绩输入到该同学的成绩单里
    {
       scanf("%d",&score);
       getchar();
       scanf("%s",str);
            for(k=0;k<n;k++)
               {
               if(strcmp(str,a[k].name)==0)                
               {
                   a[k].score[j]=score;
                   //a[i].sum+=a[i].score;
                   break;                              //找到啦就是这组数据已经输入到结构体数组里啦,可以进行下一组输入
               }
               }
    }

}

    for(i=0;i<m;i++)
    {
        sort1(n,a,i);                            //排序,i是第几次的成绩;
        for(j=0;j<n;j++)
        {
            //printf("%d %s\n",a[j].score[i],a[j].name);
        if(strcmp(a[j].name,c)==0)                   //排序后,找到DaDa的下标,+1就是名次啦
        {
            printf("%d\n",j+1);
            //printf("%d\n",a[j].score[i]);
            //break;
        }
        }

    }
    return 0;
}

  评论区