A problem of sorting----(BestCoder Round #54 (div.2))

A problem of sorting

 Time Limit: 2000/1000 MS (Java/Others)
 
 Memory Limit: 65536/65536 K (Java/Others)
問題描述
給出一張許多人的年齡和生日表。你需要從年輕到年老輸出人們的名字。(沒有人年齡相同)
輸入描述
第一行包含一個正整數T(T \leq 5)T(T5),表示數據組數。
對於每組數據,第一行包含一個正整數n(1 \leq n \leq 100)n(1n100),表示人數,接下來n行,每行包含一個姓名和生日年份(1900-2015),用一個空格隔開。姓名長度大於0且不大於100。注意姓名中只包含字母,數字和空格。
輸出描述
對於每組數據,輸出nn行姓名。
輸入樣例
2
1
FancyCoder 1996
2
FancyCoder 1996
xyz111 1997
輸出樣例
FancyCoder
xyz111
FancyCoder

分析:題意很簡單,第一次提交wa了,然後仔細重讀一遍題目,注意到最後一句話:

注意姓名中只包含字母,數字和空格。

思路:用gets或getline讀取整個句子,名字爲去掉最後5個字符,年份爲最後4個字符。


CODE:

#include <iostream>
#include <algorithm>
#include <cmath>
#include <string.h>
#include <cstdio>
using namespace std;

struct node{
    char s[105];
    int y;
}p[1005];

int cmp(node a,node b){
    return a.y>b.y;
}

int main()
{
    int t; cin>>t;
    while(t--){
        int n;
        cin>>n;
        getchar();
        for(int i=0;i<n;i++){
            gets(p[i].s);
            int len=strlen(p[i].s);
            p[i].y=p[i].s[len-4]*1000+p[i].s[len-3]*100+p[i].s[len-2]*10+p[i].s[len-1];
        }
        sort(p,p+n,cmp);
        for(int i=0;i<n;i++){
            int len=strlen(p[i].s);
            for(int j=0;j<len-5;j++)
                printf("%c",p[i].s[j]);
            printf("\n");
        }
    }
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章