- #算24点程序
- #use strict;use warnings;use diagnostics;
- use strict;
- my $a=9;
- my $b=9;
- my $c=4;
- my $d=3;
- #利用穷举法,列出abcd四个变量之间所有的各种排列
- &cacu($a,$b,$c,$d);
- &cacu($a,$b,$d,$c);
- &cacu($a,$c,$b,$d);
- &cacu($a,$c,$d,$b);
- &cacu($a,$d,$b,$c);
- &cacu($a,$d,$c,$b);
- &cacu($b,$a,$c,$d);
- &cacu($b,$a,$d,$c);
- &cacu($b,$c,$a,$d);
- &cacu($b,$c,$d,$a);
- &cacu($b,$d,$a,$c);
- &cacu($b,$d,$c,$a);
- &cacu($c,$a,$b,$d);
- &cacu($c,$a,$d,$b);
- &cacu($c,$b,$a,$d);
- &cacu($c,$b,$d,$a);
- &cacu($c,$d,$a,$b);
- &cacu($c,$d,$b,$a);
- &cacu($d,$a,$b,$c);
- &cacu($d,$a,$c,$b);
- &cacu($d,$b,$a,$c);
- &cacu($d,$b,$c,$a);
- &cacu($d,$c,$a,$b);
- &cacu($d,$c,$b,$a);
- #子函数,利用三重循环计算abcd位置不变的时候的所有可能,
- #四个数之间只可能有三种运算符,加括号只可能有五种可能.
- sub cacu
- {
- my ($a,$b,$c,$d)=@_;
- my @op=("+","-","*","/");#运算符数组
- my $x;my $y;my $z;
- my $str1;my $str2;my $str3;my $str4;my $str5;
- foreach $x (@op)#第一个运算符
- {
- foreach $y (@op)#第二个运算符
- {
- foreach $z (@op)#第三个运算符
- {
- $str1="(($a$x$b)$y$c)$z$d";
- $str2="($a$x$b)$y($c$z$d)";
- $str3="($a$x($b$y$c))$z$d";
- $str4="$a$x(($b$y$c)$z$d)";
- $str5="$a$x($b$y($c$z$d))";
- if(abs(eval($str1)-24)<0.000001){print $str1 . "=24\n";}
- if(abs(eval($str2)-24)<0.000001){print $str2 . "=24\n";}
- if(abs(eval($str3)-24)<0.000001){print $str3 . "=24\n";}
- if(abs(eval($str4)-24)<0.000001){print $str4 . "=24\n";}
- if(abs(eval($str5)-24)<0.000001){print $str5 . "=24\n";}
- }
- }
- }
- }
复制代码 把第三行
use strict;
换成
use strict;use warnings;use diagnostics;
那么结果将少很多,请问这啥原因导致的,我觉得程序没bug呀
|