SWUST.OJ 0133 水王爭霸
阿新 • • 發佈:2019-01-07
這道題沒什麼特別需要注意的點。理清思路順著敲就行:
#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); } }