繼梅蘭城的法師們在你的幫助下,成功節約符咒之後,
他們順利大量生產了各式魔法的符咒,但是…
符咒太多了所以把符咒室弄得亂七八糟的-▽-
所以請你寫一個程式再度幫助他們把符咒整理好吧。
輸入說明 :
每個測資點僅一組測資,不必EOF讀檔。
第一行有整數n(1<n<=100000)表示接下來有n張符咒
從第二行開始的n行
每行有一個符咒的名稱,內容可能包含小寫字母、大寫字母、數字、空格字元。
並且每行不超過10個字元
輸出說明 :
請依照"檔案系統"的方法,將這n個符咒排序後的結果輸出。
所謂檔案系統排序就是,
對於兩個英文單字的比較以abc和xyz來說,
先從第一個字母的"ASCII"值開始比,
(以這題出現的ASCII來說,空格<數字<大寫字母(A~Z)<小寫字母(a~z))
如a<x,所以abc在xyz前面。
如果第一個字母相同,則比較下一個字母,如abx對上aby,
比到第三位x<y,所以abx在aby前面。
範例輸入 :
7
penguin
jacker
jack doom
JACK
ws23
aszx87140
e196819
範例輸出 :
JACK
aszx87140
e196819
jack
doom
jacker
penguin
ws23
提示 :
背景知識: 排序
1.字串排序
2.共三個測資點30%、35%、35%,
第一個測資點即範例測資。
程式碼 :
#include<stdio.h> #include<string.h> char s[100000][11],temps[11]; void qsort(int left, int right) { int i = left, j = right+1, temp; int ii = left-1, jj = j; if(left < right) { while(1) { while((i+1)<jj && strcmp(s[++i],s[left])<0); while((j-1)>ii && strcmp(s[--j],s[left])>0); if(i >= j) break; strcpy(temps,s[i]); strcpy(s[i],s[j]); strcpy(s[j],temps); } strcpy(temps,s[left]); strcpy(s[left],s[j]); strcpy(s[j],temps); qsort(left, j-1); qsort(j+1, right); } } int main() { int i,j,n,temp,arr[100000]; while(scanf("%d",&n)==1) { getchar(); for(i=0; i<n; i++) gets(s[i]); qsort(0,n-1); for(i=0; i<n; i++) printf("%s\n",s[i]); } return 0; }
http://zerojudge.tw/ShowProblem?problemid=d634
沒有留言:
張貼留言