c++编程)键盘输入一个高精度的正整数M,去掉其中任意S个数字后使剩下的数最小
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c++编程)键盘输入一个高精度的正整数M,去掉其中任意S个数字后使剩下的数最小相关的知识,希望对你有一定的参考价值。
c++编程)键盘输入一个高精度的正整数M,去掉其中任意S个数字后使剩下的数最小
悬赏分:0 - 提问时间2006-6-22 09:12
例如:M=2837951, S=4
输出结果为:
237951
23751
2351
231
在比如53256789009432432,S=9
输出结果为:
3256789009432432
256789009432432
25678009432432
2567009432432
256009432432
25009432432
2009432432
从最高位往最低位,如果当前位数字比后一位数字大,就把该位数字删除,否则当前位后移一位。(不知0是否可以作为最高位数)
程序:略 参考技术A #include<stdio.h>
char m[80];
main()
int i,k;
int s;
printf("m=");
for (i=0;i<80;i++)
m[i]=getchar();
if(m[i]=='\n')
m[i]='\0';
break;
if(m[i]>9||m[i]<0) exit(0);
k=i;
printf("\ns=");
scanf("%d",&s);
while(s!=0)
int flag=0;
for (i=0;i<k;i++)
if(i==k-1)
flag=1;
if(m[i]>m[i+1])
int j;
for(j=i;j<k-1;j++)
m[j]=m[j+1];
flag=1;
if(flag)
m[k-1]='\0';
k--;
break;
printf("s=%d,m=%s\n",s,m);
s--;
自己写的,结果是正确的
洛谷P1106 删数问题
题目描述
键盘输入一个高精度的正整数N,去掉其中任意k个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和k,寻找一种方案使得剩下的数字组成的新数最小。
输出应包括所去掉的数字的位置和组成的新的整数。(N不超过250位) 输入数据均不需判错。
输入输出格式
输入格式:
n (高精度的正整数)
k (需要删除的数字个数)
输出格式:
最后剩下的最小数。
输入输出样例
输入样例#1:
175438 4
输出样例#1:
13
分析:贪心思想,我们每次删数肯定是要找前面的大数给删掉,并且这一位还要比下一位大,这样删掉以后一定会变小,模拟k次过程就好了,不过有几点要注意:1.可能会出现前导0. 2.如果删掉只剩下一个数,并且这个数是0,就不能把它当做前导0.
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <string> using namespace std; string s; int k,cnt; bool flag = false; int main() { cin >> s; int sizee = s.size(); scanf("%d",&k); for (int i = 1; i <= k; i++) { for (int j = 0; j < sizee - 1; j++) { if (s[j] > s[j + 1]) { for (int k = j + 1; k < sizee; k++) s[k - 1] = s[k]; break; } } sizee--; } for (int i = 0; i < sizee; i++) if (s[i] != ‘0‘ || (s[i] == ‘0‘ && flag) || sizee == 1) { cout << s[i]; if (s[i] != ‘0‘) flag = 1; } return 0; }
以上是关于c++编程)键盘输入一个高精度的正整数M,去掉其中任意S个数字后使剩下的数最小的主要内容,如果未能解决你的问题,请参考以下文章