删数问题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

问题描述:

给定的n位正整数a,去掉其中任意k<=n个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n位正整数a和正整数k,设计一个算法找出剩下数字组成的新数最小的删除方案。

比如你输入: 178543

再次输入: 4

那么将得出的正确答案是: 13

算法分析:

我们删除数字时,应从高位开始删除,例如上面的范例数字178543,要从中删除4位数字使得剩下的数字最小,那么第一个应该删除的是数字8,然后删除的是7,再然后就是5,最后删除的是4,最终看到结果就是13。基于此想法,并总结出规律:按高位到低位的顺序搜索,若各位数字递增,则删除最后一个数字;否则删除第一个递减区间的首字符,这样删一位便形成了一个新的数字串。然后回到串首,按上述规则再删除下一个数字。

代码如下:

#include

#include

void main()

{

char a[200]; //定义字符数组,最多可以存放200个数字

unsigned int n,i,j;

printf("请输入数字:\n");

scanf("%s",a);

printf("请输入要删除的位数:\n");

scanf("%d",&n);

if(n>=strlen(a)) //如果要删除的位数大于等于输入的数字位数,那么答案就是0

{

printf("0\n");

return;

}

while(n>0)

{

i=0; //每次开始将i初始化为0,表示重新开始检测下降点

while(i

i++;

for(j=i;j

a[j]=a[j+1];

n--;

}

printf("%s\n",a); //输出最终的结果

}

相关文档
最新文档