给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。
算法的原理应该是说从最高位开始,一次向低位搜索,一旦遇到前一位(高位)的数大于当前位,则删去前一位,直到删除k个数,如果到达末尾还没有删除k个,则说明现在这个数已经是从小到大排序了,则从最低位开始删除要求的位数。
#include
#include
int main()
{
char a[20];
int k;
printf("输入正整数:\n");
scanf("%s",a);
printf("输入k值:\n");
scanf("%d",&k);
int len = strlen(a);
while(k--)
{
int i=0,j;
while(i
{
i++;
}
if(i==len-1)//表示字符串是递增的
{
len--;
while(k--)
len--;
break;
}
else
{
for(j=i;j
a[j]=a[j+1];
len--;
}
}
printf("最小值为:\n");
int l;
for(l=0;l
printf("%c",a[l]);
printf("\n");
return 0;
}