這道題沒什麼特別需要注意的點。理清思路順着敲就行:
#include"stdio.h"
#include"string.h"
void sort(struct waterking *person,int size);//排序水貼數
void change(struct waterking *person,int L,int R);//當水貼數相同時的處理
void put(struct waterking *person,int size);//輸出ID
struct waterking
{
char ID[25];//用戶名字
char number[10005];//水貼數,用數組來存位數
}person[10005];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%s %s",person[i].ID,person[i].number);
}
sort(person,n);
return 0;
}
void sort(struct waterking *person,int size)
{
struct waterking temp;
for(int i=0;i<size-1;i++)
{
for(int j=i+1;j<size;j++)
{
if(strlen(person[i].number)<strlen(person[j].number))
{
temp=person[i];
person[i]=person[j];
person[j]=temp;
}
if(strlen(person[i].number)==strlen(person[j].number))
{
change(person,i,j);
}
}
}//冒泡排序
put(person,size);
}
void change(struct waterking *person,int L,int R)
{
struct waterking temp;
if(strcmp(person[L].number,person[R].number)<0)
{
temp=person[L];
person[L]=person[R];
person[R]=temp;
}
else if(0==strcmp(person[L].number,person[R].number))
{
if(strcmp(person[L].ID,person[R].ID)>0)
{
temp=person[L];
person[L]=person[R];
person[R]=temp;
}
}
}//處理當水貼數相同時的排名
void put(struct waterking *person,int size)
{
for(int i=0;i<size;i++)
{
printf("%s\n",person[i].ID);
}
}