问题描述:给定n位正整数a,去掉其中任意k<=n个数后,剩下的数按原次序重新排列成一个新的正整数。对于给定的n位正整数a和正整数k,设计一个算法使这个新的正整数达到最小。
问题说明:给定一个正整数a为 785314,经过删数后得到的最小的正整数应该是 14。
问题解析:这道题乍一看好象挺简单,我排个序,删4个最大值不就解决了吗?但仔细一看,好像又不太对,上面例子删4个最大值后的值是31,明显比14小很多。这道题难点就在于这个排列问题上,我们进一步观察上面例子,发现最后生成的新数一般是顺序排列的,而比4小的3因为和1逆序排列而被删除,再举一个例子:一个各个位降序排列的正整数如果删数的话一定从第一位删除。进一步总结就是从第一个数开始一个数比后一个数大就删除这个数,最后就可以得到一个最小数。
代码:这个算法是自己写的,没参照网络上的代码,有很多没有优化的地方请见谅啊-_-
#include <stdio.h>
void UpdateS(char s[]){ //更新数组s
int i, j ;
for(i=0; s[i+1]!='\0'; i++){
if(s[i] == '#'){
for(j=i; s[j+1]!='\0'; j++){
s[j]