Description
众所周知,现在各大论坛有很多水王,他们的发贴数是如此之多,以至于必须要用高精度数才能保存。现在ACMForum决定举行一次水王争霸赛,比赛的规则是将这些水王截止到2007年4月28日23时59分59秒这一刻所发的总贴数从大到小进行排序。每个水王当然都想取得尽量靠前的名次,所以他们竭尽全力,不择手段地进行灌水。终于,激动人心的一刻到来了,2007年4月29日0时0分0秒,你作为裁判得到了每个水王的发贴数,现在,你的任务是公正地把这些水王按照发贴数从大到小进行排序。
Input
输入的第一行是一个1到1000的整数N,表示总共有N位水王参加了争霸赛。
Output
以下依次给出每位水王的描述,一位水王的描述占据一行,前面为一个仅由字母和数字组成的长度不超过20的字符串,代表这个水王的ID,后面为一个整数(非负数),代表这个水王的发贴数,注意,这个整数小于2,000,000,000。
依次输出按照发贴数从小到大排好序的各位水王的ID和这个水王的发贴数,ID和发贴数用空格分开。不能有任何多余的字符。若几个ID的发贴数相同,则按照ID输入的先后顺序进行排列。
依次输出按照发贴数从小到大排好序的各位水王的ID和这个水王的发贴数,ID和发贴数用空格分开。不能有任何多余的字符。若几个ID的发贴数相同,则按照ID输入的先后顺序进行排列。
6
Lowai 1986
Zhouyuan 2987
Maolaoda 2345
BuTaoCaiGuai 2548
ArthurKing 2003
Hyyylr 3185
Lowai 1986
Zhouyuan 2987
Maolaoda 2345
BuTaoCaiGuai 2548
ArthurKing 2003
Hyyylr 3185
Lowai 1986
ArthurKing 2003
Maolaoda 2345
BuTaoCaiGuai 2548
Zhouyuan 2987
Hyyylr 3185
ArthurKing 2003
Maolaoda 2345
BuTaoCaiGuai 2548
Zhouyuan 2987
Hyyylr 3185
以下是AC代码
#include<stdio.h>
#include<string.h>
int main()
{
struct names
{
char name[20];
long postnumber;
} water[1000];//结构体由姓名和发帖量组成。
int n,i,j,k=0;
long temp;//这个变量用来在后面的排序中交换两个数。
char tempc[20];//这个变量用来在后面的排序中交换姓名顺序。
scanf("%d",&n);
for ( i = 0; i < n; i++)
{
scanf("%s %ld",water[i].name,&water[i].postnumber);
}
for(i=0;i<n;i++)
{
k=i;//最简单的选择排序算法。
for(j=i+1;j<n;j++)
{
if(water[k].postnumber>water[j].postnumber)
k=j;
}
if(k!=i)
{
temp=water[i].postnumber;
water[i].postnumber=water[k].postnumber;
water[k].postnumber=temp;
strcpy(tempc,water[i].name);
strcpy(water[i].name,water[k].name);
strcpy(water[k].name,tempc);//在交换数据的同时将姓名的位置一起交换。
}
}
for(i=0;i<n;i++)
printf("%s %ld\n",water[i].name,water[i].postnumber);
return 0;
}