算法设计与分析——删数问题
来源:互联网 发布:seo学习 编辑:程序博客网 时间:2024/04/29 15:05
-通过键盘输入一个高精度的正整数n(n的有效位数<=240),去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数字组成的新数最小。
-输入:n,s
-输出:最后剩下的最小数
-输入示例:
178543
4
-输出示例:
13
思路:
使用贪心算法,从左到右依次遍历,找到第一次出现的a(k)>a(k+1)
依次删除所有的使a(k)>a(k+1)的所有的a(k)
但要保证,删除的个数不要超过s个 and 如果没有删到s个,数字就已经单调递增,那么直接跳出循环,取该数字的前n-s位即可。
#include <iostream>#include <string>using namespace std;string min_num(string str,int s){ long len=str.size(); int ss=s; //int tem=0; while(s>0){ //最多s轮,保证不会删除多于s个数 bool b=false; //判断此轮有没有删除元素,如果没有 则跳出循环 for(int j=0;j<str.size();j++){ //遍历字符串,找到第一个str[j]<str[j+1]的元素,并且删除str[j] if(str[j]>str[j+1]){ str.erase(j,1); b=true; //代表此轮删除元素 break; //tem++; //if(tem==s){break;} } } s--; if(b==false){ //此轮没有删除元素,代表字符串中元素已按递增顺序排列。跳出while循环 break; } } string ans_str = str.erase(len-ss,str.size()-len+ss); //因为存在 没有删够s位数的情况,所以取字符串前n-s个元素,并返回 return ans_str;}int main(int argc, const char * argv[]) { string str; //输入的高精度正整数 int s; //去掉的位数 cin>>str; cin>>s; cout<<min_num(str,s)<<endl; //调用方法}
运行结果:
阅读全文
0 0
- 算法设计与分析——删数问题
- 算法分析与设计——最近点对问题
- 算法设计与分析——0/1背包问题
- 算法设计与分析——任务分配问题
- 算法设计与分析——棋盘覆盖问题
- 算法设计与分析:第四章 动态规划 4.1数塔问题
- 算法分析与设计——递归算法(二)1.汉罗塔问题
- 算法分析与设计——Tsp
- 算法设计与分析——基础知识
- 算法设计与分析——分治
- 读书笔记—《算法设计与分析基础》
- 块交换问题算法设计与分析
- 统计数字问题[算法设计与分析]
- 【算法分析与设计】全排列问题
- 【算法设计与分析基础】背包问题
- 【算法设计与分析】输油管道问题
- 算法分析与设计之统计数字问题
- 算法设计与分析--编辑距离问题
- 深刻理解Python中的元类(metaclass)(修正)
- 中文插入MySQL数据库乱码
- 第二章 布尔运算和ALU
- JavaSE学习笔记DayNote01
- Java【老司机专属 Lombok超便捷工具介绍及使用方法】
- 算法设计与分析——删数问题
- Django的是如何工作的
- LaTeX中希腊字母命令
- 分批次处理List
- Java适配器模式
- Python之禅 The Zen of Python
- JAVA01_Eclipse使用
- Xml处理工具类(Dom4j)
- Xml处理工具类(Jdom)