HDUOJ 1236 排名
阿新 • • 發佈:2018-09-13
i++ pan 分數 否則 註意 導入 har 應該 數據
這道題花了挺多時間,主要因為以下問題
一、字符串的輸入,這道題裏用scanf更為安全
二、每組數據結束後結構體內容應該清空,否則影響下組數據
三、由於我的代碼裏成績的讀取是從1開始的,所以循環時要註意(因為解題數總為正數)
#include<iostream> #include<stdio.h> #include<algorithm> #include<string.h> using namespace std; struct node { char name[100]; int score = 0; } stu[1024]; boolcmp(node a, node b) { if (a.score != b.score) return a.score>b.score; return strcmp(a.name, b.name)>0 ? 0 : 1; } int main() { int n, m, g = 0; //輸入參數 while (cin >> n >> m >> g) { int arr[100]={0}; int pass = 0; //動態分配後導入分 for(int i = 1; i <= m; i++) { cin >> arr[i]; } //開始導入學生信息 for (int i = 0; i < n; i++) { int t = 0; //姓名 scanf("%s", &stu[i].name); //解題數 scanf("%d", &t); //統計分數 while(t!=0) { int temp = 0; scanf("%d", &temp); stu[i].score += arr[temp]; t--; } } //對學生排序 sort(stu, stu + n, cmp); //統計及格人數 for (int i = 0; i < n; i++) { if (stu[i].score >= g) pass++; } cout << pass << endl; //輸出學生信息 for (int i = 0; i < pass; i++) { printf("%s %d\n", stu[i].name, stu[i].score); } for(int i=0;i<n;i++){ memset(stu[i].name,0,100); stu[i].score=0; } } return 0; }
HDUOJ 1236 排名