Categorized | Biocompute

用Perl解答一道小学数学题

Posted on 30 九月 2009 by 柳城 ,阅读 258

ps: 现在的小学生真是天才,一道小学数学题都足够你折腾的。

一道小学数学题

大概意思是这样:

1 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1

4*4,把其中6个1替换成0,使得横竖1的个数都是偶数,一共有几种,并打印出来。

原题是在 azalea says 的博客看到的,她是用Python的穷举法解答出来的,Python我是不懂的了,有兴趣的你就过去围观吧。一道小学数学题

看到后我就想尝试着用Perl来解答了,也就再次证明我对Perl还是没入门的,加紧学习啊!! 解答的思路基本上是借鉴了 azalea says 的,把十进制转为二进制。

Perl的穷举法

下面是用Perl的穷举法(还复习了一下穷举法的思路)来解答的,答案96

注:我已经尽最大努力的简化代码了,不过 is_even 这里还是有再简化的空间的。再一次证明我学艺不精啊。脚本解题速度的也不咋地。

#!/usr/bin/perl -w

$n = 4;
$count = 0;

sub SUM {
    my $sum = 0;
    map {$sum += $_} @_;
    return $sum;
}

sub int2b {
    my ($j) = @_;
    push ( my @a, (split '', sprintf("%016b", $j)) );
    return @a;
}

sub is_even {
    foreach  (0..$n-1) {
        if ( &SUM(@_[$_*$n..$n-1+$_*$n]) % 2 || &SUM(@_[$_,$n+$_,$n*2+$_,$n*3+$_]) % 2 ) {
            $re = 0;
            last;
        } else {
            $re = 1;
        }
    }
    return $re;
}

foreach (1..2**($n*$n)) {
    @_ = &int2b($_);
    if ( &is_even(@_) && &SUM(@_) == '10' ) {
         $count++;
         print "----",$count,"\n";
         print splice(@_,0,4),"\n" while @_;
    }
}

数值赋值法

还有一个高手是用 数值赋值法 解答出来的。贴出来供大家学习一下啊。高手出手,偶们小虾坐下来多多学习。

#!/usr/bin/perl -w
## Author: BENM ##

use strict;

my @a=(0,1,2,3);
my @matrix=([0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]);
my @combo=([1,0,0],[0,1,0],[0,0,1]);
my @D=([0,1,2],[0,2,1],[1,0,2],[1,2,0],[2,0,1],[2,1,0]);
my $count=0;

foreach my $i (@a) {
 foreach my $j (@a) {
 my @out=@matrix;
 @{$out[$i]}=(1,1,1,1);
 map{$_->[$j]=1}@out;

 my @B=@a;
 my @C=@a;
 splice(@B,$i,1);
 splice(@C,$j,1);

  for (my $k=0;$k<@D ;$k++) {
   my $m=0;
    foreach my $x(@B) {
    my $y=$D[$k][$m];
    $m++;
    @{$out[$x]}[@C]=@{$combo[$y]};
   }
   $count++;
   print "----$count\n";
   foreach  (@out) {
    print join " ",@$_,"\n";
   }
  }
 }
}

转载请注明 : 来源于 用Perl解答一道小学数学题 | 柳城

赞助商

20条评论 于 “用Perl解答一道小学数学题”

  1. kevinsnow kevinsnow Says:

    看不懂。。。
    有點像linux下的編程。。。
    我是來打醬油的

    [回复]

    mimzyx
    mimzyx 回复:

    我也是

    [回复]

    Lc.
    Lc. 回复:

    呵呵.你们用数学的方法来解答也是一样的阿~~ :ok:

    [回复]

  2. mimzyx mimzyx Says:

    先留言再细看,不然板凳都没了。 :ok:

    [回复]

  3. Hobo Hobo Says:

    方法不错,呵呵以后有空用C#解一下,我是学.net的呵呵

    [回复]

    Lc.
    Lc. 回复:

    高手,期待一下~ 呵呵~ c#..更加不懂.. 我连C/C++都没认真学过.哎 :kel:

    [回复]

  4. 90后的贼 90后的贼 Says:

    妈来,差点没给我弄晕了…… :ll:

    [回复]

    Lc.
    Lc. 回复:

    哈哈.. 把你弄晕我可赔不起. :tx:

    [回复]

  5. ABitNo ABitNo Says:

    看了你这个,又看那位女士的,效果不错

    [回复]

  6. CheonNii CheonNii Says:

    把6个1替换成0使得横竖1的个数都为偶数?
    要么0 0 1 1
    要么0 1 1 0
    要么0 1 0 1
    要么0 1 1 0
    要么1 0 0 1
    要么1 0 1 0
    要么1 1 0 0
    要么1 1 1 1

    如果某一行的一个1换成0 这一样就不满足行中偶数个1的要求
    如果前三行的两个1换成0 。。。。。。
    不知道是题的问题还是我没搞明白题目要求

    [回复]

    Lc.
    Lc. 回复:

    题目是没问题的啊~~ 你理解得也应该没错啊. 每一行和每一列的相加都要为偶数啊.(偶数可以是0,2,4)
    所以0 0 0 0也是可以的 :lol:

    [回复]

    CheonNii
    CheonNii 回复:

    看来我数学学的不好
    以为0不是偶数
    囧 :wq: 囧

    [回复]

    Lc.
    Lc. 回复:

    0不是偶数的话,这道题应该就无解啦. :tp:

    [回复]

  7. whisperer whisperer Says:

    ...路过 :ch:

    [回复]

    Lc.
    Lc. 回复:

    路过要收过路费.. 不然就要解出这题答才能走.~~ 哈哈 :kuk:

    [回复]

  8. aify aify Says:

    哈哈,纯技术的问题,不会,不过来打酱油的时候凑凑热闹!

    [回复]

    Lc.
    Lc. 回复:

    那就中秋国庆快乐阿~~ :lol:

    [回复]

  9. wingvc wingvc Says:

    .仔细看看先.学过可怜的VB还是半拉子~

    [回复]

  10. 燕西 燕西 Says:

    看来你们数学都不咋地....都想着用电脑解决问题啦..

    [回复]

  11. frewise frewise Says:

    学习了

    [回复]

Leave a Reply

广告招租

[强] [握手] [可爱] [ok] [呲牙] :) [偷笑] [流泪] [疑问] [亲亲] [擦汗] [得意] [衰] [可怜] [抱拳] [坏笑] more »

无觅相关文章插件,快速提升流量

adobe free

adobe free

winrar 3 download

winrar 3 download freedownload

windows 7 free

windows 7 crack

key office 2010

office 2010 key

download photo shop free

photo shop serial

corel dvd moviefactory 6

corel dvd moviefactory 6 downloads

free corel photoshop download

free corel photoshop download keygen

photoshop key

photoshop key

free corel downloads

free corel downloads cracked

free winrar download for xp

download winrar for xp for free

serial corel draw 11

serial corel draw 11 serials

windows 7 key

windows 7 key

photo shop key

photo shop key

winrar password cracker serial

wirar password cracker

serial winzip 11

serial winzip 11 key

cs5 serialz

cs5 serialz free

office 2010 professional key

office 2010 key

office 2010 free

office 2010 key

windows key

windows key