删数游戏
来源:互联网 发布:淘宝店铺装修宝贝 编辑:程序博客网 时间:2024/06/11 04:31
删数游戏
输入一个高精度的正整数n(n≤240)去掉其中任意s(s≤n)个数字后剩下的数字按原顺序组成一个新的正整数。 编程对给定的n和s,寻找一种方案使得剩下的数字组成的新数最小,并输出最小数。
Input
ns
Output
最后剩下的最小数
Sample Input
175438 4
Sample Outple
13
Analysis
应为正整数n最多有240位,所以采用字符串储存n。我们选择的贪心策略是:每一步删去/删去后能使剩下正整数最小/的数。从高位开始,若各位数字递增则删去最后一个数字,否则删除第一个递减区间的首字符,然后回到串首,以此重复s次,剩下的便是解了。删数过程如下:n=175438 //删715438 //删51438 //删4138 //删813 //解为13
Code
#include<cstdio>#include<cstring>#include<iostream>using namespace std;int main(){ string n; int s; cin>>n>>s; while(s--)//数没删完进入循环 for(int i=0;i<n.length();i++) if(n[i]>n[i+1]||i==n.length()) { n.erase(i,1); //删数的函数(从i开始往后删除1位) break; } while(n[0]=='0' &&n[1])n.erase(0,1);//删除前导0 cout<<n;}
接下来看一看数据加强版
给出一个N位数字串,删除任意K位,使剩下的数最大。
Input
第1行:2个整数N和K(1<=K<=N<=500000)第2行:N个数字(可能为0)
Output
第1行:1个可行到的最大的数
Sample Input
10 44177252841
Sample Output
775841
Analysis
我们可以模拟一个栈按顺序将字符串入栈;每次入栈时,如果栈顶元素<入栈元素,就弹出栈顶元素,并且弹出次数递减,减到0为止;然后不要急着入栈,要加一个while继续枚举下面的元素(有可能下面的元素依然小于入栈元素);这里会有特判(在代码中解释)
Code
#include<cstdio>int tail,zhan[500005],n,k,g;int main(){ scanf("%d%d\n",&n,&k); g=k;//由于k的只要更新,必须存。 zhan[tail]=999999999; for(int i=1;i<=n;i++)//采用一边输入一边处理 { char x; scanf("%c",&x); int y=x-'0';//转换 bool f=0;//标记是否有弹出 while(y>zhan[tail]&&k)//枚举栈顶及以下元素 { zhan[tail]=y;//将弹出值覆盖(相当于弹出) tail--;//往下找 f=1;//弹出标记 k--;//删除个数就要减 } tail++;//因为tail减到栈顶下一层,所以加回栈顶 if(!f)zhan[tail]=y;//没有弹出,就入栈 } if(n==g){printf("0\n");return 0;}//当删除个数等于位数,输出0 if(k)//像54321这种数据循环找不到,需要特判 for(int i=1;i<=n-k;i++) printf("%d",zhan[i]); else for(int i=1;i<=tail;i++) printf("%d",zhan[i]);}
阅读全文
2 0
- 【栈】 删数游戏
- 删数游戏(高精度)
- 删数游戏
- CSU----E: 删数游戏
- 删数游戏(版本二)
- 数独游戏求解
- 猜数游戏程序
- 人机猜数游戏
- 1995猜数游戏
- Java猜数游戏
- 猜数游戏
- 猜数游戏
- 数独游戏
- 取数游戏
- 数独游戏
- 数独游戏破解
- 文曲星猜数游戏
- 数独游戏程序
- python
- ScrollView垂直滚动
- Power2Go Platinum(威力酷烧)官方破解版V11.0.2330下载 | power2go 11 破解版含威力酷烧11 激活方法
- Android TV 焦点与按键事件分析
- Zookeeper基本原理
- 删数游戏
- 剑指offer—把二叉树打印成多行
- 小的疑问
- 获取app相关路径下所有文件大小
- MyCat介绍
- 如何成为一名卓越的前端工程师
- 蓝桥杯 算法训练 字符删除
- django 文件上传
- java8新特性-- stream