本篇内容介绍了“C++中怎么保留最大的数”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
给定一个十进制的正整数number,选择从里面去掉一部分数字,希望保留下来的数字组成的正整数最大。
输入为两行内容,第一行是正整数number,1 ≤ length(number) ≤ 50000。第二行是希望去掉的数字数量cnt 1 ≤ cnt
输出保留下来的结果。
示例
325 1
35
解析
在一个整数中除去几位数字后剩余的数最大。这题的关键就在于我们如何去选择去掉的数字,也就是去掉数字的标准是什么。小白一幵始觉得除去最小的那几位数就可以了,但是这种想法是不对的。例如3120,如果去掉0为312,但是如果去掉1,则是320,要比312要大因此,我们可以判定,单纯的去掉最小的数是不对的。
正确的想法是去掉“比后一位”小的那位数,如果没有比后一位小的数(也就是整个数每一位都是递增的数),直接去掉最后一位;因为需要刪除数,因此使用list容器更加合理一些,而且list允许在首端插入,更加支持了用除以10余数的方法获取取每一位数。这里面要注意一个问题,就是每次只能去掉一个数,之后需要重新去寻找第—个比后一位小的数。
代码
#include <iostream>#include <list>using namespace std; int main(){ int number, cnt; while (cin>>number>>cnt) { list<int> Lnumber; while (number/10!=0) { Lnumber.push_front(number % 10); number = number / 10; } Lnumber.push_front(number); for (int i =0; i < cnt; i++) { for (auto m = Lnumber.cbegin(); m != Lnumber.cend(); m++) { if (m==(--Lnumber.cend())) { m = Lnumber.erase(m); break; } auto n = m; if (*m<*(++n)) { m = Lnumber.erase(m); break; } } } int lastnumber = 0; for (auto m:Lnumber) { lastnumber = lastnumber * 10 + m; } cout << lastnumber << endl; } return 0;}
“C++中怎么保留最大的数”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注亿速云网站,小编将为大家输出更多高质量的实用文章!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/u/4581492/blog/4593447