删数问题
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。
对于给定的n和k,设计一个算法,找出剩下数字组成的新数最少的删数方案。
#include <stdio.h>
int main()
{
int c[50];
int a,m,n=0,k,i,j,p;
printf("请输入数:\n");
scanf("%d",&a);
printf("请输入要删除的个数:\n");
scanf("%d",&k);
m=a;
while(a) //判断输入数字的位数
{
n++;
if(a%10==a)
break;
a/=10;
}
a=m;
for(i=0;i<n;i++) //数a拆分成数组
{
c[n-i-1]=a%10;
a/=10;
}
m=n;
for(k;k>0;k--){ //控制减的次数
for(i=0;i<n-1;i++)
{
if(c[i]>c[i+1]) //遇到递减则删掉,后面向前移一位
{
for(j=i;j<n-1;j++)//移位
{
c[j]=c[j+1];
}
m--;
break;
}
}
}
for(i=0;i<m;i++)
printf("生成的最小数为:%d",c[i]);
printf("\n");
return 0;
}
/*
思路:
每次删掉第一个递减的数
*/