第六届全国信息技术应用水平大赛复赛试题A卷第二题,欢迎大家来指出不足
原题:2. 编程解决如下问题(50分)。
请在整数n=742683613984中删除8个数字,使得余下的数字按原次序组成的新数最小。要求如下:
(1)整数n和删除数字的个数“8”在源程序中完成赋值,程序直接输出运行结果;
(2)程序结果输出先后被删除的数字(之间以逗号分隔)和删除后所得的最小数。
(提示:整数n可以以字符数组的方式定义、赋值和处理)
程序代码:#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define N 20
void main()
{
char m[N]="742683613984",temp[2]={'\0','\0'};
int n[N];
int num; //m的长度
int sum=0; //结果
int left,right; //左右界限
int chosen_num[4]; //选中的数的位置
int num_key=8;
num=strlen(m);
for(int i=0;i<num;i++)
{
temp[0]=m[i];
n[i]=atoi(temp);
}
left=0;
right=num_key;
for(int i=0;i<(num-num_key);i++)
{
chosen_num[i]=left;
for(int j=left;j<=right;j++)
{
if(n[chosen_num[i]]>n[j])
chosen_num[i]=j;
}
left=chosen_num[i]+1;
right+=1;
}
for(int i=0;i<4;i++)
{
sum=sum*10+n[chosen_num[i]];
n[chosen_num[i]]=-1; //被选中的改为0,控制输出
}
for(int i=0;i<num-1;i++)
{
if(n[i]!=-1)
printf("%d,",n[i]);
}
printf("\n");
printf("%d\n",sum);
}
VS2010做的,运行正确









看看