博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
寻找最大数(三)
阅读量:4626 次
发布时间:2019-06-09

本文共 1414 字,大约阅读时间需要 4 分钟。

第一部分:题目

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=1057

描述

给出一个整数N,每次可以移动2个相邻数位上的数字,最多移动K次,得到一个新的整数。

求这个新的整数的最大值是多少。

 
输入
多组测试数据。
每组测试数据占一行,每行有两个数N和K (1 ≤ N≤ 10^18; 0 ≤ K ≤ 100).
输出
每组测试数据的输出占一行,输出移动后得到的新的整数的最大值。
样例输入
1990 1100 09090000078001234 6
样例输出
91901009907000008001234

第二部分:思路

要点:每次从头开始,以一个位置为起点,在可移动步数内找一个最大值,然后移动到起点 ,可移动步数减去当前移动步数。如果还可移动在从头开始找。

注意:所给移动步数不一定用完,退出的两个原因:1,可移动次数用完。2,无法通过移动使数值变大。具体看代码注释

第三部分:解题出现的错误

1,一开始想错了,以为只要一个数比它相邻后一位小就交换。

2,思路转变后,在进行移动时一开始就把最大值赋给了起点,然后就找错找半天。

第四部分:ac代码 

#include
#include
int main(){ int len,i,n,t; char s[20]; while(scanf("%s %d",&s,&n)!=EOF) { len=strlen(s); while(n)//n>0表示还可以进行移动,但是如果移动不会使结果变大就可以结束了 { //每次都从头开始寻找移动的位置:从当前位置往后找最大的数, //注意:所寻找的数的位置必须在范围之内:位置差小于等于可移动步数 for(i=0;i
i)//说明找到'有效最大数'。把数移到i位置处,前面数后移 { int l; int temp=s[index];//这里需要注意,必须用一个变量暂时存放有效最大值 for(l=index;l>i;l--) { s[l]=s[l-1]; } s[l]=temp; n-=(index-i);//剩余可移动次数 break; } } if(i==len)//表示无法进行移动使数值变大 { break; } } for(i=0;i

 

转载于:https://www.cnblogs.com/xiangguoguo/p/5418934.html

你可能感兴趣的文章
纯CCS绘制三角形箭头图案
查看>>
eclipse常见错误
查看>>
c++ string转char*
查看>>
eclipse 创建maven 项目 动态web工程完整示例
查看>>
大道至简读后感以及JAVA伪代码
查看>>
bfs记录路径,蓝桥杯真题
查看>>
2018.09.27 bzoj3029: 守卫者的挑战(概率dp)
查看>>
winXP启用SSL方式IIS
查看>>
java类路径classpath和包
查看>>
Oracler读取各种格式的相关日期格式
查看>>
Python学习札记(三十六) 面向对象编程 Object Oriented Program 7 __slots__
查看>>
iOS 时间和时间戳之间转化
查看>>
【整理】C#文件操作大全(SamWang)
查看>>
如何从数据库生成 EF Code First model
查看>>
box2dweb基础
查看>>
2013年3月4号
查看>>
jQuery 模拟 ubuntu 3D desktop 的 Dodge Effect 效果
查看>>
QT Creator 快速入门教程 读书笔记(一)
查看>>
CNN之yolo目标检测算法复习总结
查看>>
day17,模块的导入
查看>>