键盘输入一个高精度的正整数n,去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小。 如输入: 1785434 输出: 13

#include <iostream>
#include <string>
using namespace std;//从字符串v中从下标j开始删除s个字符,删除的字符保存在s_del中
void min_num(string &v, int &s,int j,string &s_del)
{if ( 0 != s){//如果j小于0则从第0个字符开始if (j<0){min_num(v,s,0,s_del);}for (size_t k = j;k<v.size()-1;++k){if (v[k]>v[k+1]){//保存删除的字符s_del += v[k];//将第k个字符删除v.erase(k,1);   //递归,从字符串v中从下标k-1开始删除s-1个字符,删除的字符保存在s_del中min_num(v,--s,k-1,s_del);return;    //(1)修改后}}}
}//从字符串v中删除s个字符,删除的字符保存在s_del中
void fun(string &v, int s,string &s_del)
{if (v.size() < s){cout<<"输入有误!"<<endl;exit(1);}min_num(v,s,0,s_del);//如果删除的字符不足s个if (s>0){s_del += v.substr(v.size()-s, s);v.erase(v.size()-s, s);}//将字符串前面的“0”去掉v.erase(0,v.find_first_not_of('0'));if (v.empty()){v = "0";}
}int main()
{string v1 = "231183";string v2 = "12435863";string v3 = "1234567";string v4 = "120083";string v5 = "10023";string v6 = "100";string s_del="";cout <<"原数字:"<<v1<<'\t';fun(v1,3,s_del);cout<<"删除后的结果:"<<v1<<'\t'<<"删除的字符:"<<s_del<<endl;s_del="";cout <<"原数字:"<<v2<<'\t';fun(v2,3,s_del);cout<<"删除后的结果:"<<v2<<'\t'<<"删除的字符:"<<s_del<<endl;s_del="";cout <<"原数字:"<<v3<<'\t';fun(v3,3,s_del);cout<<"删除后的结果:"<<v3<<'\t'<<"删除的字符:"<<s_del<<endl;s_del="";cout <<"原数字:"<<v4<<'\t';fun(v4,3,s_del);cout<<"删除后的结果:"<<v4<<'\t'<<"删除的字符:"<<s_del<<endl;s_del="";cout <<"原数字:"<<v5<<'\t';fun(v5,3,s_del);cout<<"删除后的结果:"<<v5<<'\t'<<"删除的字符串:"<<s_del<<endl;s_del="";cout <<"原数字:"<<v6<<'\t';fun(v6,3,s_del);cout<<"删除后的结果:"<<v6<<'\t'<<"删除的字符串:"<<s_del<<endl;return 0;
}

键盘输入一个高精度的正整数n,去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小相关推荐

  1. 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)

    算法经典题型12 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.输入数据均不需判错.输出 ...

  2. 输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。寻找一种方案,使得剩下的数字组成的新数最小

    输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数.寻找一种方案,使得剩下的数字组成的新数最小 样例输入 n=178543 s=4 样例输出 13 思路 贪心 由于剩 ...

  3. 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数,求组成的新数最小的删数方案(O((n-k)logk)优化)

    问题描述 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数.对于给定的n和k,设计⼀个算法,找出剩下数字组成的新数最少的删数方案. 这一道题来自zyq老师的算法分析与 ...

  4. 【汇编语言】从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符

    实验内容:键盘输入一字符,判断该字符是小写字母.大写字母.数字或其它字符. 若输入为小写字母,显示"You Input a Lowercase Letter!": 若输入为大写字母 ...

  5. Python(贪心算法)问题 D: 删数问题_输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。

    问题 D: 删数问题 题目描述 输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数. 编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小. 输出新的正整 ...

  6. 贪心法 第5关:将给定的整数去掉任意个数字后重新组成最小整数

    任务描述 本关任务:键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数. 编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小. 编程要 ...

  7. c语言从键盘输入一个百分制成绩score,C语言 基础练习40题

    一.题目 1.输入2个整数,求两数的平方和并输出. 2. 输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息. 3.函数y=f(x)可表示为: 4.编写一个程序,从4 ...

  8. java获取键盘整数_Java中从键盘输入多个整数的方法

    例题:求数列的和 分别输入两个整数n,m,中间以空格隔断,n 为数列第一项,后面各项均为前一项的开根号,求前m项的和. 第一种从键盘输入并读取的方式:sc.hasNextInt() 函数和sc.nex ...

  9. C++从键盘输入多行数据

    C++从键盘输入多行数据 1.cin cin>> cin.getline(数组名,长度,结束符) cin.get(数组名,长度,结束符) 关于cin.cin.get().cin.get(c ...

最新文章

  1. Java总复习(二)
  2. python精彩编程200例百度_Python趣味编程与精彩实例
  3. CF#303C Minimum Modular 数学分析
  4. 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]
  5. 13 种在 Linux 系统上检测 CPU 信息的工具
  6. OpenSSL常用命令快速上手
  7. ios平台下的DES加密
  8. Mac 下nginx 环境的配置
  9. 查询ElasticSearch:用SQL代替DSL
  10. SIFT算法详解(二)
  11. 【转】MySQL用户创建权限管理
  12. 新浪离职员工写给新浪各位高层的信
  13. 菲尔·席勒(Phil Schiller)卸任苹果全球营销高级副总裁,升任苹果研究员
  14. 基于python的税额计算器
  15. linux安装git lfs
  16. uvaLive 3713
  17. 【语音控制ROS】PocketPhinx语音包的使用<三>
  18. 微信公众平台-测试号-测试接口的问题
  19. 【C/C++】char * ,char ** ,char a[ ] ,char *a[]
  20. Android_自定义控件之喜马拉雅6.6.21.3播放进度条

热门文章

  1. 计算机发展史上代表性的人物,计算机发展史最具影响力人物
  2. 麦克劳林级数与麦克劳林公式(泰勒公式)及傅里叶级数(易忘)
  3. matlab引用csv文件,如何用MATLAB读取csv文件
  4. 我为什么花 1 万多买 MacBook Pro,重点是推荐我常用的开发写作相关的工具
  5. Cesium实现UnrealBloom泛光效果
  6. Linux系统查看服务器版本方法
  7. html5 倒计时跳转动画,HTML5弹性摇摆旋转的倒计时动画
  8. TESLA M40折腾笔记
  9. C++ 中的线程库和 lamber 表达式
  10. Hark的数据结构与算法练习之耐心排序