删数问题

       刚才看成文虎先生的“实用算法的分析与应用”一书中的“删数问题”,感觉先生给出的算法有错误。与大家讨论之。
 
       先叙述一下问题:
       键盘输入一个高精度的正整数N,去掉其中任意S个数字后剩下的数字按原来左右次序组成一个新的正整数。编程对给定的N和S,寻找一种方案使得剩下的数字组成的新数最小。
      输出英包含所去掉的数字的位置和组成的新的正整数(N<240)
      输入数据均不需判错。
  
      一下是我根据先生给出的算法思想写的实现:
#include  < stdio.h >
#include 
< stdlib.h >
#include 
< string .h >
int  main( int  argc,  char   *  argv[])
{
    
char big_integer[241];
    
int del;

    scanf(
"%s", big_integer);
    scanf(
"%d"&del);
    
    
while (del > 0{
        
int i = 0;

        
if ( big_integer[i] < big_integer[i+1] ) 
            
++ i;

        
for ( int lp = i; lp < strlen(big_integer);)
            big_integer[lp] 
= big_integer[++lp];

        
-- del;
    }

    
    printf(
"%s", big_integer);       
    
    system(
"pause");
    
return 0;
}
 
 
      先生的算法只能消去局部极大数位,并且,不能保证每一趟都得到最优局部最优解。这不符合贪心法的思想。
      欢迎大家和我讨论。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值