1. 程式人生 > 實用技巧 >洛谷P6547題解

洛谷P6547題解

這題看上去很簡單:把所有數字找出來再排序輸出,但有幾個注意點:

1.每個字串長度不超過100,說明數字最多又100位,要用string或char儲存。但是建議用string,因為排序會很方便。

2.string是按照字典序排序的。升序的話233333要排在9的前面,因為9>2,所以我們要手寫cmp。

3.要刪去字首零。

具體見程式碼:

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int n,len;
 4 string s,num[10500];
 5 int cmp(string a,string b){//手寫升序cmp
6 int la=a.size(),lb=b.size(); 7 if(la>lb){ 8 if(a<b)return a>b; 9 return a<b; 10 } 11 if(la<lb){ 12 if(a<b)return a<b; 13 return a>b; 14 } 15 return a<b; 16 } 17 int main(){ 18 scanf("%d",&n); 19 for(int
i=1;i<=n;++i){ 20 cin>>s; 21 s=s+"d"; 22 for(int j=0;j<s.size();++j){ 23 if(s[j]>='0'&&s[j]<='9'){ 24 int k=j; 25 while(s[j]>='0'&&s[j]<='9')++j; 26 --j;//j就是這個數的最後一個數字的位置 27 int
flag=1; 28 for(int h=k;h<=j;++h){ 29 if(s[h]!='0'){ 30 flag=0; 31 break; 32 } 33 } 34 if(flag){ 35 num[++len]="0"; 36 continue; 37 }//判斷是不是全零 38 while(s[k]=='0')++k;//刪去字首零 39 ++len; 40 for(int h=k;h<=j;++h)num[len]=num[len]+s[h]; 41 } 42 } 43 } 44 sort(num+1,num+len+1,cmp); 45 for(int i=1;i<=len;++i)cout<<num[i]<<endl; 46 return 0; 47 }