NYOJ 1057 寻找最大数(三)

来源:互联网 发布:听音识谱软件手机 编辑:程序博客网 时间:2024/05/24 06:18
   寻找最大数(三)时间限制:1000 ms  |  内存限制:65535 KB难度:2描述    给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。    求这个新的整数的最大值是多少。输入    多组测试数据。    每组测试数据占一行,每行有两个数N和K (1?≤?N≤?10^18; 0?≤?K?≤?100).输出    每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。样例输入    1990 1    100 0    9090000078001234 6样例输出    9190    100    9907000008001234   #include <stdio.h>      #include <string.h>      int main(){          char temp,str[20];          int k,len,mark,flag,j;          while(scanf("%s %d",str,&k)!=EOF){              len=strlen(str);              if(k==0)              {                  puts(str);                  continue;              }              for(int i=0;i<len;i++){                  temp=str[i],flag=1;                  for(j=i+1;j<=i+k&&j<len;j++){//贪心,从i+1到i+k寻找最大的数 并记录下序号                      if(str[j]>temp)                      temp=str[j],mark=j,flag=0;                  }                  if(!flag){                      for(int q=mark;q>i;q--)//一步一步相邻的交换。。第一次以为直接两个数交换位置,结果错了。。                      temp=str[q],str[q]=str[q-1],str[q-1]=temp;                      k=k-mark+i;                  }                     if(k==0)                  break;              }              puts(str);          }          return 0;      }  思路详解:如上

0 0