Description
问题描述:
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列成一个新的正整数。
算法设计:
给定n (1<=n<=200)位的正整数a和k,此时,k小于n。
试着设计一个算法,找出删去k个数,剩下数字组成的新数最小的删数方案。
Input
可输入多组测试数据,每组测试数据分两行,每行一个数,数的含义如下。
第一行:正整数a(a是大于0的一个n位正整数)
第二行:正整数k
以0来结束测试数据。
Output
输出每组测试数据所得出的删k位数之后的最小数。
若输出的数首位是0,无须理会,0也直接输出即可。例如:024,就直接输出024,无须改成24。
Sample Input
178543 4 87654321 2 123456789 1 254193 1 90249 2 0
Sample Output
13 654321 12345678 24193 024
用字符数组存入数据
getchar()获取;
Strlen=strlen(n)计算位数;
选取K个最大数,相同则选择位数最高的;(查询)
删除操作。
输出。
(代码可以继续优化,有时间重构一次,查询的时候时间复杂度太高。= =毕竟是遍历这种暴力办法)
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int main()
{
char n[201];
int k;
int Strlen;
while(gets(n)!=NULL&&n[0]!='0')
{
cin>>k;
getchar();
Strlen=strlen(n);
for(int i=0;i<k;i++)
{
int temp=0;
int sign=0;
for(int j=0;j<Strlen;j++)
{
if(temp<n[j])
{
sign=j;
temp=n[j];
}
}
for(int j=sign;j<Strlen;j++)
{
n[j]=n[j+1];
}
}
puts(n);
}