安徽大学第九届大学生程序设计竞赛 网络预选赛 G - 交换大法好

G. 交换大法好
Time Limit: 1000 ms   Memory Limit: 64 MB
Total Submission: 158   Submission Accepted: 31
Description
有一天,天上掉馅饼了。不过不是直接掉馅饼,是告诉你你将要得到的馅饼的数量a。聪明的你得到了一种魔法,可以在整数a中交换任意两个相邻的数字。而这种魔法,你最多只能使用k次。你使用魔法操作a,得到的最大的结果就是你最终获得的馅饼数量。

你最多可以获得的馅饼数量是多少呢?

Input
第一行,一个数字n(1<=n<=60)。代表测试数据数量。
接下来n行,每行两个整数a和k(1<=a<=1,000,000,000; 0<=k<=100)。

Output
输出n行,每行一个整数,代表你最多使用魔法k次,可以得到的最大的数字。

Sample Input
Original Transformed
2
1990 1
1034 2

Sample Output
Original Transformed
9190
3104

#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
char a[15];
int fun(int beg,int k)
{
        int mmax = a[beg] - '0', j = beg, len = strlen(a);
      for(int i = beg; i <= min(len, beg + k); i++)
      {
          if(a[i] - '0' > mmax)  {mmax = a[i] - '0'; j = i; }
      }
      return j;
}
int main()
{
  int t;
  scanf("%d", &t);
  while(t--)
  {
      int k, temp;
      int loc;
      scanf("%s", a);
      scanf("%d", &k);
      for(int i = 0; i <= strlen(a); i++)
      {
          loc = fun(i, k);
          k -= (loc - i);
          temp = a[loc];
          for(int j = loc - 1; j >= i; j--)
               a[j + 1] = a[j];
          a[i] = temp;
          if(k == 0) break;
      }
      printf("%s\n", a);
 
  }
    return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值