这样的程序不应该提示语法错误, 我认真检查过也发现不了。 (可以直接考到VC里编译)
//“背包问题”的基本描述是:有一个背包,能盛放的物品总重量为 s,设有 N 件物品,其重量分别为w1,w2,...,wn,希望从N件物品中选择若干件物品,所选物品的重量之和恰能放入该背包,即所选物品的重量之和等于 s 。
//如下程序均能求得“背包问题”的一组解,
//这其实是背包问题的简化版
#include<stdio.h>
#define N 7
#define s 15
int w[N+1]={0,1,4,3,4,5,2,7};
int knap(int s, int n) //使物品重量之各为s , n 为物品个数
{
if(s==0) return 1;
if ( s<O || ( s>O && n<1 )) return 0;
if ( knap(s-w[n],n--) )
{
printf( "4d",w[n] );return 1;
}
return 0 ;
}
main()
{
if ( knap(s,N) )
printf( "OK!\n" );
else printf( "N0!\n" );
}
问题点数:50、回复次数:8Top
1 楼lettermail7(jjjkfd)回复于 2003-10-04 11:42:22 得分 0
我已经知道,散分Top
2 楼lemon520(喷血)回复于 2003-10-04 11:44:34 得分 40
不会吧!?
-_-!
我还是接分好了!Top
3 楼wowowowo(1)回复于 2003-10-04 12:09:45 得分 1
钱多啊Top
4 楼ZhangYv(迎着朝阳,走向地狱)回复于 2003-10-04 12:11:49 得分 2
可以接分了吧?Top
5 楼tonybaobao(Tony宝宝)回复于 2003-10-04 12:20:45 得分 1
printf( "4d",w[n] ); 还是帮你看了一下,这里错了Top
6 楼seril(ser)回复于 2003-10-04 12:25:42 得分 2
if ( s<O || ( s>O && n<1 )) return 0;
应该为:else{ ( s<O || ( s>O && n<1 )) return 0; }
Top
7 楼GhostAdz(鬼斧)回复于 2003-10-04 12:55:35 得分 2
没办法 接一下Top
8 楼plainsong(短歌)()回复于 2003-10-04 13:05:13 得分 2
看了好久才看出来:
#define s 15
...
int knap(int s, int n)这一句在编译时(预处理后)就成了:
int knap(int 15, int n),当然是语法错误了。
所以现在才提倡使用const int s = 15这种语法来定义常量。
不过在C中这样定义的常量其时只是“不可变的变量”,不能完全代替“真正的常量”,比如用在数组定义时。这时我们可以用enum {s = 15}这种方法来代替(只限于整型)。Top




