作者drm343 (一卡那亚)
看板Perl
标题[问题] 为什麽无法利用变数解题?
时间Sun Dec 6 21:32:11 2009
有一个问题,在下使用排列组合的方式去解,
其中有五个变数,
已经知道五个变数合 = 2n,
而且每个变数都 <= n,
我们知道前四个变数决定後,
第五个变数就会 = 2n - 前四个变数合
我想问,为什麽我将红色部份换成
$a[4] = 2*$n - $a[0] - $a[1] - $a[2] - $a[3]
会变成程式能执行,却无法得到我想要的结果呢?
程式码如下,感谢回覆^^
$n=8;
for ($a[0]=0; $a[0] <= $n; $a[0]++) {
for ($a[1]=0; $a[1] <= $n; $a[1]++) {
for ($a[2]=0; $a[2] <= $n; $a[2]++) {
last if ($a[2] + $a[1] + $a[0] > 2*$n);
for ($a[3]=0; $a[3] <= $n; $a[3]++) {
last if ($a[3] + $a[2] + $a[1] + $a[0] > 2*$n || $a[3] +
$a[2] + $a[1] + $a[0] < $n);
OUT: for ($a[4]=0; $a[4] <= $n; $a[4]++) {
next if ($a[0] + $a[1] + $a[2] + $a[3] + $a[4] != 2*$n);
for ($i=0; $i<=4; $i++) {
$x[$i] = $a[$i];
$x[$i+5] = $a[$i] - $x[$i];
until (8 * $x[$i] - 13 * $x[$i+5] >= $min[$i] && 8 *
$x[$i] - 13 * $x[$i+5] <= $max[$i]) {
$x[$i]--;
$x[$i+5]++;
last OUT if ($x[$i] < 0)
}}
$y = join ',',@x;
print "第$n步有最佳解\n";
for ($j=0; $j<=4; $j++) {
print "$C[$j](+8,-13) = ($x[$j] , $x[$j+5])\n";
}
}}}}}
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 61.223.245.142
※ 编辑: drm343 来自: 61.223.245.142 (12/06 21:39)