算法題:整數排成一排求最大值

算法題:整數排成一排求最大值

題目描述

【編程題】丈母孃的考驗
題目ID:1136
【問題描述】小豪和女朋友戀愛數年,終於要修成正果了。今天,他將以準女婿的身份去女朋友家,唉呀,忐忑不安。
丈母孃一見小豪,嗯嗯,果真是傳說中的高富帥,不錯不錯!
額額額,等會,這孩子不會是紅漆馬桶吧?長得好看,但是一肚子的粑粑o(^▽^)o,那可配不上我家寶貝乖乖女兒哦。
「小豪,好孩子,能幫阿姨一個忙嗎?老年大學有一道題,我還不會呢。」
原來是這樣的一道題:有三個正整數,將其連成一排,求最大的數。
例如,5,6,7,最大數爲765;又如33,444,5,最大數爲544433
你能幫小豪作出這道題嗎?使得小豪能經過丈母孃的考驗,迎娶白富美,走上人生巔峯。
【輸入形式】三個正整數i,j,k(1<=i,j,k<=30000)
【輸出形式】最大數
【樣例輸入】算法

clipboard.png

【測試用例】
1)
輸入:
65 654 6543
輸出:
656546543編程

2)
輸入:
12 123 1234
輸出:
123412312數組

3)
輸入:
123 32 51
輸出:
5132123函數

4)
輸入:
87 234 43
輸出:
8743234測試

5)
輸入:
234 355 1987
輸出:
3552341987spa

思路分析

  • 首先想到的是以int類型存儲,取每一個數的第一位,進行對比,而後進行冒泡排序,輸出,假如第一位相同呢,不是還得對比第二位嗎,第二位也同呢不是還得對比第三位嗎,太過麻煩,不可行(x)
  • 而後能夠想到以字符串的類型進行存儲,利用string.h中的strcmp函數進行對比,就能夠解決對比完第一位還得對比第二位第三位的麻煩問題了,例如對比234和355,可對比出355是大於234的,可是新的問題又出現了,這個數字的位數是不固定的,strcmp函數對比的結果不必定是正確的,例如65和654,strcmp直接對比出的是654大,而咱們要的是排列順序是65654,而不是65465
  • 爲了解決這個難題,咱們能夠採用先合併再對比的方法取正確的值,也就是若是字符串A+B>B+A,則A的優先級比較高,A應該放在前面,例如65和654,65654比65465的strcmp值大,則65應該先輸出.

代碼描述

#include<stdio.h>
#include<string.h>
int main()
{
   char a[3][6];            //定義二維數組,以行保存字符串
   int i;
   for (i=0;i<3;i++){
       scanf("%s",&a[i]);       //按行讀入字符串
   }
   int j;
    for (i=0;i<3;i++){
        for (j=0;j<3-i-1;j++){          //j多減1,防止數組越界
            char tema[12],temb[12];       //臨時數組保存要比較的值
            strcpy(tema,a[j]);
            strcat(tema,a[j+1]);            
            strcpy(temb,a[j+1]);
            strcat(temb,a[j]);
            if (strcmp(tema,temb)<0){       //比較a+b與b+a的大小(字符串比較),把小的頂到右邊去
                char tem[6];                   //臨時數組保存a[i]
                strcpy(tem,a[j]);
                strcpy(a[j],a[j+1]);
                strcpy(a[j+1],tem);
            }
        }
    }
    for (i=0;i<3;i++){          //按行輸出二維數組
        printf ("%s",a[i]);
    }
    return 0;
}
相關文章
相關標籤/搜索