键盘输入一个高精度的正整数n,去掉任意s个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的n和s,寻找一种方案,使得剩下的数最小
键盘输入一个高精度的正整数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,寻找一种方案,使得剩下的数最小相关推荐
- 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。(C++)(贪心法)
算法经典题型12 键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数.编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小.输入数据均不需判错.输出 ...
- 输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数。寻找一种方案,使得剩下的数字组成的新数最小
输入一个正整数n,去掉其中任意s个数字后,剩下的数字按原左右次序将组成一个新的正整数.寻找一种方案,使得剩下的数字组成的新数最小 样例输入 n=178543 s=4 样例输出 13 思路 贪心 由于剩 ...
- 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数,求组成的新数最小的删数方案(O((n-k)logk)优化)
问题描述 给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成⼀个新的正整数.对于给定的n和k,设计⼀个算法,找出剩下数字组成的新数最少的删数方案. 这一道题来自zyq老师的算法分析与 ...
- 【汇编语言】从键盘输入一字符,判断该字符是小写字母、大写字母、数字或其它字符
实验内容:键盘输入一字符,判断该字符是小写字母.大写字母.数字或其它字符. 若输入为小写字母,显示"You Input a Lowercase Letter!": 若输入为大写字母 ...
- Python(贪心算法)问题 D: 删数问题_输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数。
问题 D: 删数问题 题目描述 输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原左右次序组成一个新的正整数. 编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小. 输出新的正整 ...
- 贪心法 第5关:将给定的整数去掉任意个数字后重新组成最小整数
任务描述 本关任务:键盘输入一个高精度的正整数 n,去掉其中任意 s 个数字后剩下的数字按原左右次序将组成一个新的正整数. 编程对给定的 n 和 s,寻找一种方案使得剩下的数字组成的新数最小. 编程要 ...
- c语言从键盘输入一个百分制成绩score,C语言 基础练习40题
一.题目 1.输入2个整数,求两数的平方和并输出. 2. 输入一个圆半径(r)当r>=0时,计算并输出圆的面积和周长,否则,输出提示信息. 3.函数y=f(x)可表示为: 4.编写一个程序,从4 ...
- java获取键盘整数_Java中从键盘输入多个整数的方法
例题:求数列的和 分别输入两个整数n,m,中间以空格隔断,n 为数列第一项,后面各项均为前一项的开根号,求前m项的和. 第一种从键盘输入并读取的方式:sc.hasNextInt() 函数和sc.nex ...
- C++从键盘输入多行数据
C++从键盘输入多行数据 1.cin cin>> cin.getline(数组名,长度,结束符) cin.get(数组名,长度,结束符) 关于cin.cin.get().cin.get(c ...
最新文章
- Java总复习(二)
- python精彩编程200例百度_Python趣味编程与精彩实例
- CF#303C Minimum Modular 数学分析
- 微软欢迎所有热爱开源软件的朋友们来投稿![征稿开放时间:2015年8月17日]
- 13 种在 Linux 系统上检测 CPU 信息的工具
- OpenSSL常用命令快速上手
- ios平台下的DES加密
- Mac 下nginx 环境的配置
- 查询ElasticSearch:用SQL代替DSL
- SIFT算法详解(二)
- 【转】MySQL用户创建权限管理
- 新浪离职员工写给新浪各位高层的信
- 菲尔·席勒(Phil Schiller)卸任苹果全球营销高级副总裁,升任苹果研究员
- 基于python的税额计算器
- linux安装git lfs
- uvaLive 3713
- 【语音控制ROS】PocketPhinx语音包的使用<三>
- 微信公众平台-测试号-测试接口的问题
- 【C/C++】char * ,char ** ,char a[ ] ,char *a[]
- Android_自定义控件之喜马拉雅6.6.21.3播放进度条