日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

nylgacm_1057_寻找最大数(三)

發布時間:2025/3/16 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 nylgacm_1057_寻找最大数(三) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

描述

給出一個整數N,每次可以移動2個相鄰數位上的數字,最多移動K次,得到一個新的整數。

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

輸入

多組測試數據。
每組測試數據占一行,每行有兩個數N和K (1?≤?N≤?10^18; 0?≤?K?≤?100).

輸出

每組測試數據的輸出占一行,輸出移動后得到的新的整數的最大值。

樣例輸入

1990 1 100 0 9090000078001234 6

樣例輸出

9190 100 9907000008001234

解析:首先這道題設計到移位操作,所以我建議把數字改成字符數組來處理。

對于數據處理,我們要從最簡單的開始考慮:

一、當輸入的數是個位數時,我們應該原樣輸出;

二、對于多位數移動k次求最大數時:
?? ?當k<數據位數時,?則把前k位中的最大數依次交換到首位,?k = k -?把最大數移到首位所需的次數;然后把第二位到第2+k位中的最大數依次交換到第二位,k?=?k?-?把2~2+k間的最大數依次交換到第二位的所需的次數;以此類推,第二、第三位。。。?? ?
?? ?當k>數據位數時,?則把前k位(即整串數字)的最大數依次交換到首位;這里跟上面的情況是一樣的我不再贅述。?? ?
?? ?for(int?i=?當前位置p;?i < p + k; i++)
?? ?{
?? ??? ?找到最大樹的下標;
?? ?}
?? ?if(找到)
?? ?{
?? ??? ?依次交換位置;
?? ??? ?改變k值;
?? ?}
?? ?移動當前位置p到后一位;

#include <stdio.h> #include <string.h> int main() { char s[21],ch[21]; int k; while(~scanf("%s %d", s, &k)) {int p1=0, p2=0; while(k){ if(p1 == strlen(s)) break; for(int i = p1; i <=p1+ k && i<strlen(s); i++) {if(s[i]>s[p2]) p2 = i; } if(p2 > p1) { k = k-(p2 - p1); char c; for (int j = p2;j > p1;j--) {c = s[j]; s[j] = s[j-1]; s[j-1] = c; } } p1++; p2 = p1; } puts(s); } return 0; }



總結

以上是生活随笔為你收集整理的nylgacm_1057_寻找最大数(三)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。