E删数问题
Problem Description
键盘输入一个高精度的正整数N(此整数中没有‘0’),去掉其中任意S个数字后剩下的数字按原左右次序将组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。
输出应包括所去掉的数字的位置和组成的新的正整数。(N不超过240位)
输入数据均不需判错。
Input
输入若干组数据,每组数据包含两个正整数N,S。
Output
输出符合题意要求的最小值,每个结果占一行。
Sample Input
175438
4
Sample Output
13
这个题有两种思路
思路1:
将末尾填0 然后每次遍历字符数组,if(a[i]>a[i+1])delete a[i];
思路2
例如样例 字符数组从0开始 留两个数
从中找出0-4之间找出最小的数
然后 从找出的位置-5在找出一个最小的数
上代码~~
post code:
#include<stdio.h> #include<vector> #include<iostream> #include<string.h> using namespace std; vector <int> s; vector <int> ::iterator iter; int main() { char a[240]; int len,rest,i,z; scanf("%d",&z); while (z--) { scanf("%s",a); s.clear(); scanf("%d",&rest); len=strlen(a); for (i=0;i<len;i++) { s.push_back(a[i]-'0'); } s.push_back(0); if (len<=rest) { printf("0\n"); s.clear(); continue; } while (rest--) { iter=s.begin(); for (i=0;i<len;i++) { if (s[i]>=s[i+1]) { s.erase(iter); len--; break; } iter++; } } for (i=0;i<len;i++) printf("%d",s[i]); printf("\n"); s.clear(); } }
// 删数采用的是vector 来进行