删数问题
2016-12-27 20:36
357 查看
删数问题
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设计一个算法,找出剩下数字组成的新数最少的删数方案。
输入示例:
178543
输出:
13
解:
删数问题:
要求删除给定数字n中的 k 个数字使其剩余的数字最小
从第一个数字开始扫描,删除第一个不是升序的数字
如果一直是升序,则删除最后一位数字
#include <stdio.h>
#include <math.h>
int main()
{
int a[100];
int x;
int k;
scanf("%d%d",&x,&k);
int len=log10(x)+1;
for(int i=len-1;i>=0;i--)
{
a[i]=x%10;
x/=10;
}
for(int i=0;i<k;i++)
{
int j;
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
break;
}
for(int z=j;z<len-i;z++)
{
a[z]=a[z+1];
}
}
for(int i=0;i<len-k;i++)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}
给定n位正整数a,去掉其中任意k个数字后,剩下的数字按原次序排列组成一个新的正整数。对于给定的n和k,设计一个算法,找出剩下数字组成的新数最少的删数方案。
输入示例:
178543
输出:
13
解:
删数问题:
要求删除给定数字n中的 k 个数字使其剩余的数字最小
从第一个数字开始扫描,删除第一个不是升序的数字
如果一直是升序,则删除最后一位数字
#include <stdio.h>
#include <math.h>
int main()
{
int a[100];
int x;
int k;
scanf("%d%d",&x,&k);
int len=log10(x)+1;
for(int i=len-1;i>=0;i--)
{
a[i]=x%10;
x/=10;
}
for(int i=0;i<k;i++)
{
int j;
for(j=0;j<len-i-1;j++)
{
if(a[j]>a[j+1])
break;
}
for(int z=j;z<len-i;z++)
{
a[z]=a[z+1];
}
}
for(int i=0;i<len-k;i++)
{
printf("%d",a[i]);
}
printf("\n");
return 0;
}
相关文章推荐
- JBuilder Editor中光标不能正确定位问题的解决
- 不改一行代码定位线上性能问题
- 目录横穿“(Ttaversal)”问题的解决办法
- 软件测试问题登记表
- 软件测试问题汇总表
- 软件使用问题登记表
- 升级到Delphi 6 - 兼容性问题之二
- 升级到Delphi 6 - 兼容性问题之三(完)
- 升级到Delphi 6 - 兼容性问题(中文全文)
- 如何分析问题和需求?如何界定问题主次?。。。。
- WINAMP SDK 常见问题回答(FAQ)
- 迁移到 ASP .NET:需考虑的重要问题
- jsp、servlet关于中文问题再谈
- 将Socket应用程序从Unix向Windows移植中应注意的几点问题
- XML 中的常见问题
- 一个关于#include的问题
- [导入]转贴:C++语言常见问题解:#105 ~ #120
- 绘制位图的问题
- 使用ActiveX控件开发网页常见的问题
- 如何解决visual interdev的调试问题