a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言將數組中元素的數排序輸出的相關問題解決

2020-01-26 14:40:36
字體:
來源:轉載
供稿:網友

 問題描述:輸入一個正整數數組,將它們連接起來排成一個數,輸出能排出的所有數字中最小的一個。例如輸入數組{32,  321},則輸出這兩個能排成的最小數字32132。請給出解決問題的算法,并證明該算法。
      思路:先將整數數組轉為字符串數組,然后字符串數組進行排序,最后依次輸出字符串數組即可。這里注意的是字符串的比較函數需要重新定義,不是比較a和b,而是比較ab與 ba。如果ab < ba,則a < b;如果ab > ba,則a > b;如果ab = ba,則a = b。比較函數的定義是本解決方案的關鍵。
      證明:為什么這樣排個序就可以了呢?簡單證明一下。根據算法,如果a < b,那么a排在b前面,否則b排在a前面。可利用反證法,假設排成的最小數字為xxxxxx,并且至少存在一對字符串滿足這個關系:a > b,但是在組成的數字中a排在b前面。根據a和b出現的位置,分三種情況考慮:
      (1)xxxxab,用ba代替ab可以得到xxxxba,這個數字是小于xxxxab,與假設矛盾。因此排成的最小數字中,不存在上述假設的關系。
      (2)abxxxx,用ba代替ab可以得到baxxxx,這個數字是小于abxxxx,與假設矛盾。因此排成的最小數字中,不存在上述假設的關系。
      (3)axxxxb,這一步證明麻煩了一點。可以將中間部分看成一個整體ayb,則有ay < ya,yb < by成立。將ay和by表示成10進制數字形式,則有下述關系式,這里a,y,b的位數分別為n,m,k。
        關系1: ay < ya => a * 10^m + y < y * 10^n + a => a * 10^m - a < y * 10^n - y => a( 10^m - 1)/( 10^n - 1) < y
        關系2: yb < by => y * 10^k + b < b * 10^m + y => y * 10^k - y < b * 10^m - b => y < b( 10^m -1)/( 10^k -1)
        關系3: a( 10^m - 1)/( 10^n - 1) < y < b( 10^m -1)/( 10^k -1)  => a/( 10^n - 1)< b/( 10^k -1) => a*10^k - a < b * 10^n - b =>a*10^k + b < b * 10^n + a => a < b
       這與假設a > b矛盾。因此排成的最小數字中,不存在上述假設的關系。
       綜上所述,得出假設不成立,從而得出結論:對于排成的最小數字,不存在滿足下述關系的一對字符串:a > b,但是在組成的數字中a出現在b的前面。從而得出算法是正確的。
      參考代碼:

//重新定義比較函數對象 struct compare {  bool operator() (const string &src1, const string &src2)  {   string s1 = src1 + src2;   string s2 = src2 + src1;   return s1 < s2; //升序排列,如果改為s1 > s2則為逆序排列  } }; //函數功能 : 把數組排成最小的數 //函數參數 : pArray為數組,num為數組元素個數 //返回值 : 無 void ComArrayMin(int *pArray, int num) {  int i;  string *pStrArray = new string[num];   for(i = 0; i < num; i++) //將數字轉換為字符串  {    stringstream stream;   stream<<pArray[i];   stream>>pStrArray[i];  }   sort(pStrArray, pStrArray + num, compare()); //字符串數組排序   for(i = 0; i < num; i++) //打印字符串數組   cout<<pStrArray[i];  cout<<endl;   delete [] pStrArray; } 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久一 | 久久国产精品99久久久久久老狼 | 国产福利91精品一区二区三区 | 久久99国产精品久久99大师 | 色老头在线观看 | 蜜桃免费一区二区三区 | 午夜欧美| 午夜成人免费影院 | 精品国产污网站污在线观看15 | 国产专区在线 | 亚洲一区二区三区免费在线观看 | 中文字幕在线乱码不卡二区区 | 亚洲精品影院 | www.com91| 国产电影一区二区 | 国产a级毛片| 成人性视频在线 | 久久久精品久久久久久 | 国产青青草 | 日韩国产在线 | 国产一级一级片 | 正在播放国产精品 | 欧美精品在线免费观看 | 欧美久久视频 | 日韩欧美中文字幕在线视频 | 亚洲成人福利 | 午夜精品久久久久久久久久蜜桃 | 欧美福利电影在线观看 | 亚洲男人的天堂网站 | 女人高潮特级毛片 | 日韩毛片视频 | 亚洲男人的天堂在线播放 | 久久久久国产精品视频 | 在线视频国产一区 | 午夜在线免费观看 | 色呦呦视频在线观看 | 日韩欧美国产一区二区三区 | 成人精品一区二区三区中文字幕 | 99re热精品视频 | 日韩在线欧美 | 日本免费黄色 |