贪心算法——删除数字求最小值
#include<stdio.h> void main() { int i,k,m,n,t,x,a[10000]; char b[10000]; printf(" 请输入整数:"); scanf("%s",b); // 以字符串方式输入高精度整数 for(n=0,i=0;b[i]!='\0';i++) {n++;a[i]=b[i]-48;} printf(" 删除数字个数: ");scanf("%d",&k); if(n<=k) { printf(" 整数中数字不够删!\n ");return;} printf(" 以上%d位整数中删除%d个数字分别为: ",n,k); t=0;m=0;x=0; i=t+1; while(x<k && i<=n) // 删除的数字后已无递增区间,脱离循环 { if(t>=0 && a[t]>a[i]) // 出现递增,删除递增的首数字 { printf("%d, ",a[t]); a[t]=-1; // 删除的数字标记-1 while(t>=0 && a[t]==-1) t--; // 从删除数字的前一位非-1数字开始查找递增区间 x=x+1; // x统计删除数字的个数 } else t=i++; } printf("\n 删除后所得最小数: "); for(i=0,x=0;x<n-k;i++) // 打印左边的n-k个非-1数字 if(a[i]!=-1) { printf("%d",a[i]);x++; } printf("\n"); }