要求:一个m位的数,去掉其中任意s个数,剩下的数按原次序组成一个新的数,要求编写程序是的重新组合的那个数最小。
主要思路:
1、确定最高位:现在前s+1个数中找到最小的那个数,同时将所找到的这个数之前的数全部删掉。(因为删除s个数,所以最高位的那个数肯定在前s+1之中)
2、按同样的方法依次确定第i位数,但是数字比较的范围要缩小到从上一个确定的数后一位数到第s+i位数。(一共比较s次)
3、在删数的过程中要判断当前是否已经删满s个数了。
4、若s次比较完之后删除的数不满s个(假如只删了n个),那就要将最后s-n个数删除。
C++代码:
修改后的代码:
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
void deletea(char *num,int j,int n){
for(int i=j;i<strlen(num)-n;i=i+n){
num[i]=num[i+n];
}
}
int length(char *num){
return strlen(num);
}
void fun(char *num,int k,i