1. 程式人生 > >PAT -- A1062(2019/2/15/1)

PAT -- A1062(2019/2/15/1)

names star 函數返回值 ++ 分數 ext lag cmp flag

A1062.德才論

代碼如下
 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm> // STL    使用相關的函數需要include進來 
 4 using namespace std;
 5 struct Stu_info{
 6     char id[10]; 
 7     int de, cai, sum;
 8     int flag;
 9 }stu[100010];
10 //此函數返回值為bool型,相應的返回 true 或者 false 
11 bool
cmp(Stu_info a, Stu_info b) { 12 if(a.flag != b.flag) return a.flag < b.flag; 13 else if(a.sum != b.sum) return a.sum > b.sum; 14 else if(a.de != b.de) return a.de > b.de; 15 else return strcmp(a.id, b.id) < 0; 16 } 17 int main(){ 18 int n, L, H; 19 scanf("
%d%d%d", &n, &L, &H); 20 int m = n; 21 for(int i = 0; i < n; i++) { 22 scanf("%s%d%d", stu[i].id, &stu[i].de, &stu[i].cai); 23 //總分計算 24 stu[i].sum = stu[i].de + stu[i].cai; 25 //判斷類別,等地越高,分數越低 26 if(stu[i].de < L || stu[i].cai < L) {
27 stu[i].flag = 5; 28 m--; 29 } 30 else if(stu[i].de >= H && stu[i].cai >= H) stu[i].flag = 1; 31 else if(stu[i].de >= H && stu[i].cai < H) stu[i].flag = 2; 32 else if(stu[i].de >= stu[i].cai) stu[i].flag = 3; 33 else stu[i].flag = 4; 34 } 35 //通過cmp函數返回的值,來進行 (從大到小) 或者 (從小到大)的排序 36 sort(stu, stu + n, cmp); 37 // sort()見sort詳解 38 printf("%d\n", m); 39 for(int i = 0; i < m; i++) { 40 printf("%s %d %d\n", stu[i].id, stu[i].de, stu[i].cai); 41 } 42 return 0; 43 }
以下是STL  sort(start, end, compare)  的解釋代碼
 1 bool compare(int a,int b){
 2     return a<b;     //升序排列,如果改為return a>b,則為降序
 3 }
 4 int main(){
 5     int a[20]={2,4,1,23,5,76,0,43,24,65},i;
 6     for(i=0;i<20;i++)
 7         printf("%d", a[i]);
 8     sort(a,a+20,compare);
 9     for(i=0;i<20;i++)
10         printf("%d", a[i]);
11     return 0;
12 }

---恢復內容結束---

PAT -- A1062(2019/2/15/1)