寻找最大数——模拟

题目描述
给出一个正整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的正整数。求这个新的正整数的最大值。
输入
输入一个正整数N和K,输出新的正整数。例如:N=1990,K=1,输出9190;N=101,K=0,输出101;N= 9090000078001234,K= 6,输出9907000008001234。
输出
输出新的数字

样例输入
1990 1
101 0
9090000078001234 6
样例输出
9190
101
9907000008001234

String是属于c++的类,String定义的字符串不能用scanf,printf输入输出,但可以使用,cin,cout输入输出,也可以用getline(cin,s)输入

题目分析

  1. 题目要有经过有限次相邻两个数交换后,要求得出最大的数
  2. 首先交换次数k已经给定,所以我们要尽量让这个数的高位变大,所以我们从左至右一次遍历把最大的数记下来用于交换,我们每次只能做相邻的两个数交换,而不是只交换最大的数和第一个数。
  3. 如果我们找到了最大的数标记为t,因为我们是从i开始遍历的,所以交换的次数就是t-i。
  4. 还有一个要注意的地方,就是在内层循环中,j的最大值不能超过字符串本身的长度,不然会越界产生无法想象的结果

AC代码

#include <bits/stdc++.h>
using namespace std;
int main()
{
   
   string s;
   int k, t;
   while (cin >> s >> k)
   {
   
      int m = s.length();
      for (int i = 0; i < m && k != 0; ++i)
      {
   
         t = i;
         for (int j = i + 1; j <= i + k && j < m; ++j)
            if (s[t] < s[j])
               t = j;
         for (int j = t; j > i; --j)
            swap(s[j], s[j - 1]);
         k -= (t - i);
      }
      cout << s << endl;
   }
   return 0;
}

字符数组AC代码

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e3 + 10;
int main()
{
   
   char c[maxn];
   int k, t;
   while (~scanf("%s%d", c, &k))
   {
   
      int lc = strlen(c);
      for (int i = 0; i < lc && k != 0; ++i)
      {
   
         t = i;
         for (int j = i + 1; j <= i + k && j < lc; ++j)
         {
   
            if (c[t] < c[j])
               t = j;
         }
         for (int j = t; j > i; --j)
            swap(c[j], c[j - 1]);
         k -= (t - i);
      }
      printf("%s\n", c);
   }
   return 0;
}

初夏的清晨总是让人心旷神怡~

陌上开花,可缓缓归矣~
全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
牛客38347925...:9,2学生暑期实习失利开始投小厂,给这群人整自信了
点赞 评论 收藏
分享
怎么起名字:早知道就不读书了,害得我送外卖还得扶眼镜
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务