成绩排名(PTA)
某學校的成績單算法如下:
最終成績 = (A課成績 * A課學分 + B課成績 * B課學分 + C課成績 * C課學分 + D課成績 * D課學分)/總學分,結果保留兩位小數。
如某同學成績如下:
| 算法分析與設計 | 4.0 | 90 |
| 大學物理 | 3.5 | 85 |
| Python程序設計 | 3.0 | 95 |
| 計算機系統基礎 | 4.0 | 82.5 |
| 線性代數 | 3.0 | 80 |
則他的最終成績為
(4.0 * 90 + 3.5 * 85 + 3.0 * 95 + 4.0 * 82.5 + 3.0 * 80)/(4.0+3.5+3.0+4.0+3.0) = 86.43
現在給你幾組學生的成績,要求你計算他們的最終成績,并對他們進行排名。
輸入格式:
第一行輸入兩個數,學生的個數S(10000以內)及課程數C(100以內)。
第二行輸入C個數,分別是C門課程的學分。
接下來的S行,每一行有C個數,這C個數分別代表學生C門課的成績,每門課的成績出現順序與第二行的學分一一對應。
每門課的成績滿分為100分,學分最高不超過10。
輸出格式:
輸出有S行,由高到低的輸出學生的最終成績,以及學生在輸入中出現的次序(從1開始),如果有最終成績相同的學生,則他們的順序按輸入中的次序有小到大排列。成績保留兩位有效數字。
輸入樣例:
在這里給出一組輸入。例如:
4 2 2.5 4 90 80 94 92.5 80 75 90 95輸出樣例:
在這里給出相應的輸出。例如:
93.08 2 93.08 4 83.85 1 76.92 3 #include<bits/stdc++.h> using namespace std; void swap(int &a, int &b) {int temp = a;a = b;b = temp; } int main(){int s,c,i,j;//s個學生,c個課程cin >> s >> c;float num[c],ct=0;//num每個學分,ct總學分for(i=0;i<c;i++){cin >> num[i];ct += num[i];}float val[s]={0},k;//val存儲成績,k每次輸入成績int val2[s]={0};for(i=0;i<s;i++){for(j=0;j<c;j++){cin >> k;val[i]+=k*num[j];val2[i]=i+1;}val[i]/=ct;}for(i=0;i<s-1;i++)for(j=0;j<s-1-i;j++){if(val[j]<val[j+1]){swap(val[j],val[j+1]);swap(val2[j],val2[j+1]);}}for(i=0;i<s;i++){if(i)cout <<endl;printf("%.2f %d",val[i],val2[i]);}}?
總結
- 上一篇: 广州市南沙区人社领导来访霖珑云科考察调研
- 下一篇: Android面试专题系列(五):说一下