A problem of sorting
給出一張許多人的年齡和生日表。你需要從年輕到年老輸出人們的名字。(沒有人年齡相同)
第一行包含一個正整數T(T≤5),表示數據組數。 對於每組數據,第一行包含一個正整數n(1≤n≤100),表示人數,接下來n行,每行包含一個姓名和生日年份(1900-2015),用一個空格隔開。姓名長度大於0且不大於100。注意姓名中只包含字母,數字和空格。
對於每組數據,輸出n行姓名。
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;
}