亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決

 更新時間:2016年03月15日 17:35:26   投稿:goldensun  
這篇文章主要介紹了C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決,文中的題目是將元素連接起來排成一個數(shù)并要求出這類結(jié)果中數(shù)最小的一個,需要的朋友可以參考下

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

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

相關(guān)文章

  • 如何讓Dev-C++支持auto關(guān)鍵字呢

    如何讓Dev-C++支持auto關(guān)鍵字呢

    這篇文章主要介紹了如何讓Dev-C++支持auto關(guān)鍵字問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 安裝OpenMPI來配合C語言程序進(jìn)行并行計算

    安裝OpenMPI來配合C語言程序進(jìn)行并行計算

    這篇文章主要介紹了安裝OpenMPI來配合C語言程序進(jìn)行并行計算的例子,MPI的全稱是Message Passing Interface即標(biāo)準(zhǔn)消息傳遞界面,可以用于并行計算,需要的朋友可以參考下
    2015-11-11
  • c語言main函數(shù)使用及其參數(shù)介紹

    c語言main函數(shù)使用及其參數(shù)介紹

    這篇文章主要介紹了c語言main函數(shù)使用及其參數(shù)介紹,需要的朋友可以參考下
    2014-04-04
  • C語言使用回溯法解旅行售貨員問題與圖的m著色問題

    C語言使用回溯法解旅行售貨員問題與圖的m著色問題

    回溯法即是在按條件搜索走不通的情況下退回再選擇其他路線的方法,這里我們來看C語言使用回溯法解旅行售貨員問題與圖的m著色問題的方法示例:
    2016-07-07
  • C++ vector模擬實現(xiàn)的代碼詳解

    C++ vector模擬實現(xiàn)的代碼詳解

    vector是表示可變大小數(shù)組的序列容器,就像數(shù)組一樣,vector也采用的連續(xù)存儲空間來存儲元素,本質(zhì)講,vector使用動態(tài)分配數(shù)組來存儲它的元素,本文將給大家詳細(xì)介紹一下C++ vector模擬實現(xiàn),需要的朋友可以參考下
    2023-07-07
  • C++使struct對象擁有可變大小的數(shù)組(詳解)

    C++使struct對象擁有可變大小的數(shù)組(詳解)

    下面小編就為大家?guī)硪黄狢++使struct對象擁有可變大小的數(shù)組(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • C語言實現(xiàn)文件讀寫操作

    C語言實現(xiàn)文件讀寫操作

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)文件讀寫操作,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-12-12
  • libevent庫的使用方法實例

    libevent庫的使用方法實例

    這篇文章主要介紹了libevent庫的使用方法實例,有需要的朋友可以參考一下
    2013-12-12
  • C語言實現(xiàn)wave波形

    C語言實現(xiàn)wave波形

    本文詳細(xì)講解了C語言實現(xiàn)wave波形的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2021-12-12
  • C語言實現(xiàn)航班管理系統(tǒng)

    C語言實現(xiàn)航班管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)航班管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論