magic square(幻方、宫格)解法实现(全)
发布时间:2020-12-15 21:09:45 所属栏目:大数据 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 #this is for solving the problem of magic square #!/usr/bin/perl -w use strict;#input a number,judge it is an odd or 4k or 4k+2 or err.print
以下代码由PHP站长网 52php.cn收集自互联网 现在PHP站长网小编把它分享给大家,仅供参考 #this is for solving the problem of magic square #!/usr/bin/perl -w use strict; #input a number,judge it is an odd or 4k or 4k+2 or err. print "Please enter an integer > 2n"; chomp (my $x = <STDIN>); my $remain = $x % 4; my $little = $x/2; my @a; if ($x >= 3 ) { if (($remain == 1) || ($remain == 3)) { odd($x); #it's an odd.use the subroutin of odd. } elsif ($remain == 2) { double_odd($x); #it's 4k+2.use the subroutin of double_odd. } elsif ($remain == 0) { double_even($x); #it's 4k.use the subroutin of double_even } } else { print "please enter an integer >2n"; exit; } #print the magic square for(my $i=0;$i<$x;$i++) { for(my $j=0;$j<$x-1;$j++) { print "$a[$i][$j]t"; } print "$a[$i][$x-1]n";#the last element of every row in the array followed"n". sub double_odd { my $k=($little-1)/2; for(my $i=0;$i<$x;$i++) { for(my $j=0;$j<$x;$j++) { $a[$i][$j]=0; } } odd($little); for(my $i=0;$i<$little;$i++) { for(my $j=0;$j<$little;$j++) { $a[$i][$j+$little]=$a[$i][$j]+50; $a[$i+$little][$j]=$a[$i][$j]+75; $a[$i+$little][$j+$little]=$a[$i][$j]+25; } } for(my $i=0;$i<$little;$i++) { if($i!=$k) { for(my $j=0;$j<$k;$j++) { my $b = $a[$i][$j]; $a[$i][$j]=$a[$i+$little][$j]; $a[$i+$little][$j] = $b; } } else { for(my $j=$k;$j<2*$k;$j++) { my $b = $a[$i][$j]; $a[$i][$j]=$a[$i+$little][$j]; $a[$i+$little][$j] = $b; } } } } sub odd { (my $z) = @_; my $i = 0; my $j = ($z-1)/2; for(my $c=1;$c<=$z * $z;$c++) { $a[$i][$j] = $c; $i--; $j++; if($a[$i][$j]) {$i=$i+2;$j--;} elsif($i<0 && $j<$z) {$i=$z-1;} elsif($j>=$z && $i>=0) {$j=0;} elsif($i<0 && $j>=$z) {$i=$i+2;$j--;} elsif($i==0 && $j==0) {$i=$z-1;} } } sub double_even { my $n = $x-1; my $b = 1; for(my $i=0;$i<$x;$i++) { for(my $j=0;$j<=$n;$j++,$b++) { $a[$i][$j]=$b; } } for(my $i=0;$i<$x/2;$i++) { for(my $j=0;$j<$x;$j++) { if ($i ==$j || $i==($n-$j) || ($i+$j)% 4==3 || ($j-$i)% 4==0) { my $c=$a[$i][$j]; $a[$i][$j]=$a[$n-$i][$n-$j]; $a[$n-$i][$n-$j]=$c; } } } } 以上内容由PHP站长网【52php.cn】收集整理供大家参考研究 如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |