第六届全国信息技术应用水平大赛复赛试题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做的,运行正确