完全初学者请教关于lingo程序的问题

来源:百度知道 编辑:UC知道 时间:2024/05/30 04:48:00
涉足编程才不久,搞不太懂,请高手解释一下为什么运行错误,而且lingo能调试吗?
有100个数,任意相邻50个和小于等于500,那么这100个数字之和最大是多少?
我的程序:
model:
init:
n=100;
endinit
sets:
run/1..100/:s;
endsets
max=@sum(run:s);
@for(run(i)|i#le#(n/2):
@sum(run(j)|(j #ge# i) #and# (j #le# (n/2)):s(j))<=500);
end
谢谢下面的回答。
只是我有一点没有搞懂,j #le# (j+49),我觉得j是一定小于等于j+49的,你这里的限制是什么意思啊?
关于n,我其实是想弄个常量,譬如说不是100个数,1000个数的话,相邻500个相等这样的问题,拿我只需改动常量你的值就可以了。但是发现,在申明sets的时候,run/1..n/:s;它说不对,不知道有没有办法解决。

model:
init:
n=100;
endinit
sets:
run/1..100/:s;
endsets
max=@sum(run:s);
@for(run(i)|i#le#50:@sum(run(j)|((j #ge# i) #and# (j #le# (j+49))):s(j))<=500;);
end
这样子就可以啦。
还有啊,你的变量里面没有n啊,写下面那句没什么意义啊。
init:
n=100;
endinit
嗯,你说一定小于j+49是从题目本身来说的还是其他约束条件已经包括这一点了从而没有必要写这句了?另外据我所知lingo不能写成形如run/1..n/:s;的语句。

model:
sets:
run/1..100/:s;
endsets
max=@sum(run:s);
n=100;
@for(run(i)|i#le#(n/2+1): @sum(run(j)|(j #ge# i) #and# (j #le# (i+n/2-1)):s(j))<=500);
end

这样应该就可以
init定义的是解决时初始取值,并不是定义常量