c語言之獎學金

//這是一道結構體的題除了繁就簡單
//可能有學號該如何同步搞定的問題>>>在結構體裏定義學號(number)然後根據循環賦值就OK。>>>結構體內定義不一定都要用
//這道題還是可以的***
//來源於NOIP普及組 NOIP2007 理論上C++會方便很多但是這道題在C語言的課上也是會拿來練習的畢竟真的很簡單

#include <stdio.h>
struct student{
    int chinese;
    int math;
    int english;
    int number;
    int sum;
}s[1000];
int main(int argc, const char * argv[]) {
    struct student temp,ex,t;
    int n;
    scanf("%d",&n);
    /*讀入數據*/
    for (int i=0; i<n; i++) {
        scanf("%d%d%d",&s[i].chinese,&s[i].math,&s[i].english);
        s[i].sum=s[i].chinese+s[i].math+s[i].english;
        s[i].number=i+1;
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {
            if (s[i].sum<s[i+1].sum) {//sum
                temp=s[i];s[i]=s[i+1]; s[i+1]=temp;
            }
        }
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {
            if (s[i].sum==s[i+1].sum) {//Chinese
               if (s[i].chinese<s[i+1].chinese) {
                ex=s[i];s[i]=s[i+1]; s[i+1]=ex;
               }
            }
        }
    }
    for (int j=1; j<n; j++) {
        for (int i=0; i<n-j; i++) {//number
             if ((s[i].sum==s[i+1].sum)&& (s[i].chinese==s[i+1].chinese)) {
                if (s[i].number>s[i].number) {
                    t=s[i];s[i]=s[i+1]; s[i+1]=t;
                }
             }
        }
    }
    for (int i=0; i<5; i++) {
        printf("%d %d\n",s[i].number,s[i].sum);
    }
    return 0;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章