constraints
time limit: 1 secs, memory limit: 32 mb
description
某小學最近得到了一筆贊助,打算拿出其中一部分為學習成績優秀的前5名學生發獎學金。期末,每個學生都有3門課的成績:語文、數學、英語。先按總分從高到低排序,如果兩個同學總分相同,再按語文成績從高到低排序,如果兩個同學總分和語文成績都相同,那麼規定學號小的同學排在前面,這樣,每個學生的排序是唯一確定的。
任務:先根據輸入的3門課的成績計算總分,然後按上述規則排序,最後按排名順序輸出前5名學生的學號和總分。注意,在前5名同學中,每個人的獎學金都不相同,因此,你必須嚴格按上述規則排序。例如,在某個正確答案中,如果前兩行的輸出資料(每行輸出兩個數:學號、總分)是:
7 279
5 279
這兩行資料的含義是:總分最高的兩個同學的學號依次是7號、5號。這兩名同學的總分都是279(總分等於輸入的語文、數學、英語三科成績之和),但學號為7的學生語文成績更高一些。如果你的前兩名的輸出資料是:
5 279
7 279
則按輸出錯誤處理,不能得分。
input
輸入包含多組測試資料,每個測試資料有n+1行。
第1行為乙個正整數n,表示該校參加評選的學生人數。
第2到n+1行,每行有3個用空格隔開的數字,每個數字都在0到100之間。第j行的3個數字依次表示學號為j-1的學生的語文、數學、英語的成績。每個學生的學號按照輸入順序編號為1~n(恰好是輸入資料的行號減1)。
所給的資料都是正確的,不必檢驗。
output
對於每個測試資料輸出5行,每行是兩個用空格隔開的正整數, 依次表示前5名學生的學號和總分。兩個相鄰測試資料間用乙個空行隔開。
sample input
6 90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
8 80 89 89
88 98 78
90 67 80
87 66 91
78 89 91
88 99 77
67 89 64
78 89 98
sample output
6 265
4 264
3 258
2 244
1 237
8 265
2 264
6 264
1 258
5 258
problem source
noip 2007
#include
#include
#include
struct edgstu[100];
int comp(const
void*p1,const
void*p2)
return c->num > d->num?1:-1;
}//qsort比較函式
int main()
qsort(stu, n, sizeof(stu[0]), comp);
for (int i = 0; i < 5; i++)
scanf("%d", &n);
}return
0;}
cpp答案!
#include
#include
using
namespace
std;
struct node
; struct cmp
else
else
} }
};
int main()
for(int i = 1; i <= 5; i++)
} return
0;
}
結構體替換的函式
void swap(struct edg *a,struct edg *b)
關於qsort的五種種用法
compare( (void ) & elem1, (void ) & elem2 );
compare 函式的返回值 描述
< 0 elem1將被排在elem2前面
0 elem1 等於 elem2
.>0 elem1 將被排在elem2後
void quicksort(int h,int t)//快排的實現!
a[mid]=a[j];
a[j]=x;
quicksort(h,j-1);
quicksort(j+1,t);
return
;}
1 數字的排序
int comp(const
void *a, const
void *b)
qsort(word,100,sizeof(word[0]),cmp);
3 對double型別的排序這裡做個注釋,本來是因為要判斷如果a==b返回0的,但是嚴格來說,兩個double數是不可能相等的,只能說fabs(a-b)<1e-20之類的這樣來判斷,所以這裡只返回了1和-1
#include
#include
double s[1000];
int i,n;
int cmp(const
void * a, const
void * b)
int main()
4 對結構體的排序包括一級,二級……實際上都是相同的,只是在cmp函式中有所不同。
struct in
s[100]
int cmp( const
void *a ,const
void *b)
5 按字串的字典序
struct in
s[100];
//按照結構體中字串str的字典順序排序
int cmp ( const
void *a , const
void *b )
qsort
(s,100,sizeof(s[0]),cmp);
補充:
struct 和 typedef struct的區別:
獎學金(結構體)
輸入的第一行是乙個整數n 1 n 100 表示學生的總數。接下來的n行每行是一位學生的資料,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生幹部,是否是西部省份學生,以及發表的 數。姓名是由大小寫英文本母組成的長度不超過20的字串 不含空格 期末平均成績和班級評議成績都是0到100之間的整...
1589 獎學金 (結構體)
時間限制 1 sec 記憶體限制 128 mb 提交 44 解決 28 提交 狀態 討論版 第一行是乙個整數n 1 n 10 表示學生的總數。接下來的n行,每行是一位學生的資料,從左向右依次是姓名,期末平均成績,班級評議成績,是否是學生幹部,是否是西部省份學生,以及發表的 數。姓名是由大小寫英文本母...
關於結構體
關鍵字struct表示定義的是結構體的資料型別,緊隨其後的識別符號student是結構體型別名。花括號中依次列舉該型別的每個成員資料型別及其名稱,每個成員的資料型別可以是基本資料型別或者自定義資料型別,但是不能重名。結構的成員也成為域。結構體型別的定義以乙個分號結束。由於資料型別僅是為變數分配儲存空...