nyoj--1057--寻找最大数(三)(贪心)
寻找最大数(三)
时间限制:1000 ms | 内存限制:65535 KB
难度:2
- 描述
-
给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。
求这个新的整数的最大值是多少。
低位大的数再多敌不过高位一个数,这道题表现的很明显,先从高位的部分找最大的数,然后放到高位,如果移动的次数没有用完,就接着平移
#include<stdio.h> #include<string.h> int main() { char a[55]; int k; while(scanf("%s%d",a,&k)!=EOF) { int t; int len=strlen(a); char flog; for(int i=0;i<len&&k!=0;i++) { t=i; for(int j=i+1;j<=i+k&&j<len;j++) if(a[t]<a[j]) t=j;//有k次机会,可以控制的长度也就有k,每一次遍历找到最大的数 for(int j=t;j>i;j--) { flog=a[j]; a[j]=a[j-1]; a[j-1]=flog; } k-=t-i;//将t变换到i需要t-i次 } printf("%s\n",a); } return 0; }