最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

 問題描述:輸入一個(gè)正整數(shù)數(shù)組,將它們連接起來(lái)排成一個(gè)數(shù),輸出能排出的所有數(shù)字中最小的一個(gè)。例如輸入數(shù)組{32,  321},則輸出這兩個(gè)能排成的最小數(shù)字32132。請(qǐng)給出解決問題的算法,并證明該算法。
      思路:先將整數(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)鍵。
      證明:為什么這樣排個(gè)序就可以了呢?簡(jiǎn)單證明一下。根據(jù)算法,如果a < b,那么a排在b前面,否則b排在a前面??衫梅醋C法,假設(shè)排成的最小數(shù)字為xxxxxx,并且至少存在一對(duì)字符串滿足這個(gè)關(guān)系:a > b,但是在組成的數(shù)字中a排在b前面。根據(jù)a和b出現(xiàn)的位置,分三種情況考慮:
      (1)xxxxab,用ba代替ab可以得到xxxxba,這個(gè)數(shù)字是小于xxxxab,與假設(shè)矛盾。因此排成的最小數(shù)字中,不存在上述假設(shè)的關(guān)系。
      (2)abxxxx,用ba代替ab可以得到baxxxx,這個(gè)數(shù)字是小于abxxxx,與假設(shè)矛盾。因此排成的最小數(shù)字中,不存在上述假設(shè)的關(guān)系。
      (3)axxxxb,這一步證明麻煩了一點(diǎn)??梢詫⒅虚g部分看成一個(gè)整體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é)論:對(duì)于排成的最小數(shù)字,不存在滿足下述關(guān)系的一對(duì)字符串:a > b,但是在組成的數(shù)字中a出現(xiàn)在b的前面。從而得出算法是正確的。
      參考代碼:

//重新定義比較函數(shù)對(duì)象 
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ù)組元素個(gè)數(shù) 
//返回值 : 無(wú) 
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)文章

  • C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享

    C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享

    這篇文章主要介紹了C++中可正確獲取UTF-8字符長(zhǎng)度的函數(shù)分享,需要的朋友可以參考下
    2014-08-08
  • 簡(jiǎn)單了解C語(yǔ)言中主線程退出對(duì)子線程的影響

    簡(jiǎn)單了解C語(yǔ)言中主線程退出對(duì)子線程的影響

    這篇文章主要介紹了簡(jiǎn)單了解C語(yǔ)言中主線程退出對(duì)子線程的影響,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • C++多繼承同名隱藏實(shí)例詳細(xì)介紹

    C++多繼承同名隱藏實(shí)例詳細(xì)介紹

    多繼承可以看作是單繼承的擴(kuò)展。所謂多繼承是指派生類具有多個(gè)基類,派生類..本文將對(duì)C++多繼承同名隱藏實(shí)例進(jìn)行分析
    2012-11-11
  • Linux線程管理必備:解析互斥量與條件變量的詳解

    Linux線程管理必備:解析互斥量與條件變量的詳解

    本篇文章是對(duì)互斥量與條件變量的應(yīng)用進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++單例類模板詳解

    C++單例類模板詳解

    這篇文章主要介紹了C++單例類模板,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)詳解

    下面小編就為大家?guī)?lái)一篇C++類的靜態(tài)成員變量與靜態(tài)成員函數(shù)的文章。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來(lái)看看吧
    2021-11-11
  • C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例

    C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例

    這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下
    2017-09-09
  • 在c和c++中實(shí)現(xiàn)函數(shù)回調(diào)

    在c和c++中實(shí)現(xiàn)函數(shù)回調(diào)

    如何在c和c++中實(shí)現(xiàn)函數(shù)回調(diào)呢?現(xiàn)在小編就和大家分享一下在c/c++中實(shí)現(xiàn)函數(shù)回調(diào)的示例代碼,需要的朋友可以參考下
    2013-07-07
  • c++中for雙循環(huán)的那些事

    c++中for雙循環(huán)的那些事

    本人很菜,今天看《C++編程思想》中的一道課后題中說到這樣一個(gè)問題。修改兩層嵌套的for循環(huán)的標(biāo)識(shí)符,觀察結(jié)果變化
    2013-05-05
  • C++命名空間和缺省參數(shù)介紹

    C++命名空間和缺省參數(shù)介紹

    這篇文章主要介紹了C++命名空間和缺省參數(shù),使用命名空間的目的是對(duì)標(biāo)識(shí)符的名稱進(jìn)行本地化,以避免命名沖突或名字污染,namespace關(guān)鍵字的出現(xiàn)就是針對(duì)這種問題的,缺省參數(shù)是聲明或定義函數(shù)時(shí)為函數(shù)的參數(shù)指定一個(gè)默認(rèn)值,更多詳細(xì)內(nèi)容需要的小伙伴可以參考下面文章內(nèi)容
    2022-01-01

最新評(píng)論

浦县| 肥西县| 石台县| 承德市| 额尔古纳市| 汝阳县| 石泉县| 壤塘县| 葵青区| 宁阳县| 宜昌市| 石河子市| 和平县| 会同县| 峨边| 黄骅市| 威信县| 筠连县| 恩平市| 阜康市| 徐汇区| 凤凰县| 宣汉县| 山西省| 将乐县| 瑞金市| 通榆县| 水富县| 娄烦县| 厦门市| 长宁县| 徐州市| 邯郸县| 乳源| 吉林省| 达孜县| 横山县| 呼和浩特市| 旺苍县| 金秀| 改则县|