|
Post by huangno1 on Mar 2, 2017 20:53:59 GMT -8
程式說明
阿明昨晚夢見財神爺,財神爺說因為阿明平日為人善良,所以想幫他一把。只要阿明告訴財神爺他現在銀行的存款數字,財神爺會想辦法交換其中兩個數字,讓他的存款變得最大。(如果交換後存款都會變小,財神爺當然就不交換了。)阿明一覺醒來,雖覺得不可思議,但還是想知道如果真有財神爺相助,他的財富會變成多少。本功能的目的就是幫阿明這個忙。假設阿明的存款最多是 20 位數。
請撰寫兩個支援函式:
(1) Swap():本函式用以交換兩個字元變數的內容,無回傳值。
(2) Maximize():本函式傳入一個字串 (最長20個字元),字串中全為數字字元。本函式會將傳入之字串更改為交換其中兩個數字字元後的最大字串。
提示:以字串讀進使用者的輸入,以 strcpy() 複製字串,strcmp() 比較字串大小。
(本題改自 Facebook Hacker Cup 2015 Qualification Round)
【輸入範例1】
1234
【輸出範例1】
Now you have $4231!
【輸入範例2】
9876
【輸出範例2】
Now you have $9876!
#include <stdio.h>
#include <string.h>
constexpr int MaxStrLen = 20;
void Swap(
char *a , char *b
)
{
char tamp = *a ;
*a = *b ;
*b = tamp ;
}
// ----------------------------------------------
void Maximize(
char money [ ]
)
{
char max_money [ MaxStrLen + 1 ] = { } ;
strcpy ( max_money , money ) ;
for ( int i = 0 , len = strlen ( money ) ; i < len - 1 ; i += 1 )
{
for ( int j = i + 1 ; j < len ; j += 1 )
{
Swap ( &money [ i ] , &money [ j ] ) ;
if ( strcmp ( money , max_money ) > 0 )
{
strcpy ( max_money , money ) ;
}
Swap ( &money [ i ] , &money [ j ] ) ;
}
}
strcpy ( money , max_money ) ;
}
// ----------------------------------------------
int main()
{
char money[MaxStrLen+1]= {};
gets(money);
Maximize(money);
printf("Now you have $%s!\n", money);
return 0;
}
|
|