日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

pat1038

發布時間:2023/12/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 pat1038 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? 這一問就是要將找出各個字符串如何組合才能使得組成的數字最小;

首先我的思路是:關鍵在于如何尋找任何兩個字符串的排列方式,寫成一個cmp的bool類型函數,然后用sort,將其排序,然后將所有的字符串相連接成一個較長的字符串,最后輸出來,注意去掉前面的0;

在寫cmp函數時,我的思路是:從前到后比較兩個字符串的每一位,找到第一位不同的時候就返回這位數字的大小比較,如果直到一個字符串結束時都全部一樣,就將較短的那個的第一位和較長的那個字符串的對應位比較,例如比較234和23時將2和4比較。

特別注意:在cmp函數中如果有多個比較的時候要注意將較小的部分放成相同的

后來發現這種方法容易出錯,借鑒了一下大佬的:可以考慮兩個字符串加起來后先后順序的比較,例如234和34時,只比較23434和34234就可以了,然后注意一下轉化函數stroi。。。其實很好記,string to int

最后有個小坑。。當所有的都是0的時候要記得輸出一個0。

// // main.cpp // 1038 // // Created by DouglasLee on 18/3/3. // Copyright ? 2018年 DouglasLee. All rights reserved. //#include <iostream> #include<string.h> #include<algorithm> #include<vector> using namespace std; vector<string> s; bool cmp1(string s1,string s2){string ss1=s1+s2;string ss2=s2+s1;long k1=stol(ss1);long k2=stol(ss2);return k1<k2; } bool cmp(string s1,string s2){int po=0;int flag=0;while(s1[po]!='\0'&&s2[po]!='\0'){if(s1[po]==s2[po])po++;else{flag=1;break;}}if(flag==1)return s1[po]<s2[po];else if(s1.length()<s2.length()){//s1?比較短,到頭了return s1[0]<s2[po];}elsereturn s1[po]<s2[0]; }int main(int argc, const char * argv[]) {int n;cin>>n;for(int i=0;i<n;i++){string tmp;cin>>tmp;s.push_back(tmp);}sort(s.begin(),s.end(),cmp1);int size=s.size();int p=0;string ss;for(int i=0;i<size;i++){ss+=s[i];//cout<<s[i];}while(ss[p]=='0')p++;int kkk=0;while(ss[p]!='\0'){cout<<ss[p++];kkk++;}if(kkk==0)cout<<0;return 0; }

總結

以上是生活随笔為你收集整理的pat1038的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。