南工ACM 尋找最大數(三)

2021-07-29 14:46:12 字數 1160 閱讀 5289

描述

給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。

求這個新的整數的最大值是多少。

輸入 多組測試資料。

每組測試資料佔一行,每行有兩個數n和k (1 ≤ n≤ 10^18; 0 ≤ k ≤ 100).

輸出 每組測試資料的輸出佔一行,輸出移動後得到的新的整數的最大值。

樣例輸入

1990 1

100 0

9090000078001234 6

樣例輸出

9190

100

9907000008001234

思路:貪心演算法

運用貪心演算法,就要能夠找到問題的子問題。這樣就可以迴圈下去,直到結束。

輸入的資料用字串表示,因為字串最多隻需18個字元,而用int ,就必須能夠表示10^18 ,不知道long long int 能不能表示,而且後面還不好處理

問題分析

分析發現,最有影響力的是最高位。所以第一步是將s[1~(n-1)]最高位調到最大(在只能變動k的情況下),然後再調其他位。將剩下的s[2~(n-1)]作為子問題,繼續上面步驟。

偽**:

for((i=0~n-1) && k>0 )

}printf(s)

**

#include

#include

int findk(char* s,int i,int k);

void change(char* s,int i,int h);

int main()

; int k=0;

int n=0;

int i=0;

int h=0,x=0;

while(scanf("%s",s)!=eof)//scanf(%s)不能存放空格,認為空格就是回車鍵 ,二gets()將空格視為乙個普通字元

else

if(s[h]>s[i])

}printf("%s\n",s);

}return0;}

int findk(char* s,int i,int k)

void change(char* s,int i,int h)

return;

}

尋找最大數(三)

描述 給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出每組測試資料的輸出佔一行,輸出移動後得到的新的整數的最大值。樣例輸入1990 1 1...

尋找最大數(三)

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入 多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出每組測試資料的輸...

尋找最大數(三)

時間限制 1000 ms 記憶體限制 65535 kb 難度 2 描述 給出乙個整數n,每次可以移動2個相鄰數字上的數字,最多移動k次,得到乙個新的整數。求這個新的整數的最大值是多少。輸入 多組測試資料。每組測試資料佔一行,每行有兩個數n和k 1 n 10 18 0 k 100 輸出 每組測試資料的...