|
发表于 2003-12-15 14:20:22
|
显示全部楼层
home_king和我想的相似啊。。。。
谢谢大家的努力,这道题好研究呀!!
写了个不成功的,但实在弄不明白为什么不行。
#!/usr/bin/perl -w
%0=( 0,"00", 1,"01", 2,"02", 3,"03", 4,"04", 5,"05", 6,"06", 7,"07" );
%1=( 0,"10", 1,"11", 2,"12", 3,"13", 4,"14", 5,"15", 6,"16", 7,"17" );
%2=( 0,"20", 1,"21", 2,"22", 3,"23", 4,"24", 5,"25", 6,"26", 7,"27" );
%3=( 0,"30", 1,"31", 2,"32", 3,"33", 4,"34", 5,"35", 6,"36", 7,"37" );
%4=( 0,"40", 1,"41", 2,"42", 3,"43", 4,"44", 5,"45", 6,"46", 7,"47" );
%5=( 0,"50", 1,"51", 2,"52", 3,"53", 4,"54", 5,"55", 6,"56", 7,"57" );
%6=( 0,"60", 1,"61", 2,"62", 3,"63", 4,"64", 5,"65", 6,"66", 7,"67" );
%7=( 0,"70", 1,"71", 2,"72", 3,"73", 4,"74", 5,"75", 6,"76", 7,"77" );
srand; $i=int(rand(8)); $j=int(rand(8));delete${$i}{$j};
for ($count=1;$count<=63;$count++) {
if (($i+1) =~ /[0-7]/ && ($j+2) =~ /[0-7]/ ) {delete${($i+1)}{($j+2)}; @a=%{($i+1)} ; print "@a\n"; }
elsif (($i+1) =~ /[0-7]/ && ($j-2) =~ /[0-7]/ ) {delete${($i+1)}{($j-2)}; @a=%{($i+1)} ; print "@a\n"; }
elsif (($i-1) =~ /[0-7]/ && ($j+2) =~ /[0-7]/ ) {delete${($i-1)}{($j+2)}; @a=%{($i-1)} ; print "@a\n"; }
elsif (($i-1) =~ /[0-7]/ && ($j-2) =~ /[0-7]/ ) {delete${($i-1)}{($j-2)}; @a=%{($i-1)} ; print "@a\n"; }
elsif (($i+2) =~ /[0-7]/ && ($j+1) =~ /[0-7]/ ) {delete${($i+2)}{($j+1)}; @a=%{($i+2)} ; print "@a\n"; }
elsif (($i+2) =~ /[0-7]/ && ($j-1) =~ /[0-7]/ ) {delete${($i+2)}{($j-1)}; @a=%{($i+2)} ; print "@a\n"; }
elsif (($i-2) =~ /[0-7]/ && ($j+1) =~ /[0-7]/ ) {delete${($i-2)}{($j+1)}; @a=%{($i-2)} ; print "@a\n"; }
elsif (($i-2) =~ /[0-7]/ && ($j-1) =~ /[0-7]/ ) {delete${($i-1)}{($j-1)}; @a=%{($i-1)} ; print "@a\n"; }
else { print "not match, the scripte will exit\n"; exit ; } }
先整8个关联数组,每个数组元素代表一个格,其实只要key和关联数组名就行了,元素可以任意设。
产生随机数$i and $j 代表马的走步。
$i+1,$j+2
$i+1,$j-2
$i-1,$j+2
$i-1,$j-2
$i+2,$j+1
$i+2,$j-1
$i-2,$j+1
$i-2,$j-1
这表示马的8种走法,后面的[0-7]限制了它永远走在棋盘内。
if {} elsif{} elsif {}.........决定了要是第一种情况不行,就第二种,要不就下一种,以此类推。。这样马就能自动走到下一格(走到哪一格我们并不需要关心它)。
后面的delete ${}{}是删除马走到的一格元素。就这样,有64步棋,把8个关联数组全清空为止。
举个例子:产生了随机数$i ==3.$j==3.
---->$i+1,$j+2,now,$i==4,$j==5,
---->$i+1,$j+2,now, $i==5,$j==7
---->$i+1,$j-2,now, $i==6,$j==5 #第一种情况不行了,自动选择第二种。
---->$i+1,$j-2,now, $i==7,$j==3 #第二种。
---->$i-1,$j+2,now, $i==6,$j==5 #第一和第二种都不行了。选择第三种。
就这样自动选择,直到所有的关联数组为空就行了。
问题是,为什么不能把元素删去,觉得道理是对的。。。。:ask:ask:ask
请大家给我释疑!! |
|