给定n位正整数a,去掉其中任意k≤n 个数字后,剩下的数字按原次序排列组成一个新的正整数。
对于给定的n位正整数a 和正整数k,设计一个算法找出剩下数字组成的新数最小的删数方案。
算法的原理应该是说从最高位开始,一次向低位搜索,一旦遇到前一位(高位)的数大于当前位,则删去前一位,直到删除k个数,如果到达末尾还没有删除k个,则说明现在这个数已经是从小到大排序了,则从最低位开始删除要求的位数。以下为我的算法:
#include<stdio.h>
void main(){
int i,j;
int prefix;
long N[18]={4,3,7,5,9,3,4,9,5,7,4,3,5,3,4,8,9,8};//数 1456385
int lenN=18;
int S = 12;
int k=0;
prefix=N[0];
for(i=0;i<S;i++){
for(j=1;j<lenN-i;j++){
if(N[j-1]>N[j]){
k=j-1;
while(k<lenN-i-1){
N[k]=N[k+1];
k++;
}
N[lenN-i-1]=0;
break;
}
}
if(j == lenN-i){
k=i;
while(k<S){
N[j-1]=0;
j--;
k++;
}
break;
}
}
for(i=0;i<lenN-S;i++)
printf("%d",N[i]);
getchar();
}
运行结果为333348