1. 程式人生 > >HDUOJ 1236 排名

HDUOJ 1236 排名

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];

bool
cmp(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 排名