[题]1-9组成三个三位数,要求比值为1:2:3

回复
头像
paktc
出类拔萃
出类拔萃
帖子: 65
注册时间: 2016年07月21日 20:34
联系:

[题]1-9组成三个三位数,要求比值为1:2:3

帖子 paktc »

题:用1-9组成三个三位数abc, def, ghi, 每个数字只能使用一次,并且要求 abc:def:ghi=1:2:3
例:219,438,657
头像
rubyish
渐入佳境
渐入佳境
帖子: 52
注册时间: 2018年04月23日 09:58
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 rubyish »

192 384 576 219 438 657 273 546 819 327 654 981

#!/usr/bin/perl -w
use 5.010;
use warnings;

sub play {
  number:
    for my $n ( 123 .. 987 / 3 ) {
        my @num = map { split '', $n * $_ } 1 .. 3;
        my %has = ( 0 => 1 );
        for (@num) {
            next number if $has{$_}++;
        }
        say join $", map { $n * $_ } 1 .. 3;
    }

}

play;
sub play2 {
    for my $n ( 123 .. 987 / 3 ) {
        my %num = map { $_, 1 } map { split '', $n * $_ } 1 .. 3;
        next if keys %num != 9;
        next if exists $num{0};

    say join $", map { $n * $_ } 1 .. 3;
}
}
play2;
$_
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 523066680 »

代码: 全选

my $a,$b,$c,$n;
for my $i ( 123 .. 334 )
{
    ($a, $b, $c) = ($i, $i * 2, $i * 3);
    $n = $a + $b*1000 + $c * 1000000;
    $mask = 0;
    while ( $n >= 1 )
    {
        $x = $n%10;
        $mask |= 1 << $x;
        $n/=10;
    }
    printf "%d %d %d\n", $a, $b, $c if $mask == 0b1111111110;
}
头像
rubyish
渐入佳境
渐入佳境
帖子: 52
注册时间: 2018年04月23日 09:58
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 rubyish »

有意思。有意思。這個。

代码: 全选

$n = $a + $b*1000 + $c * 1000000;
$_
头像
rubyish
渐入佳境
渐入佳境
帖子: 52
注册时间: 2018年04月23日 09:58
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 rubyish »

sub play { for my $i ( 123 .. 334 ) { my ( $a, $b, $c ) = ( $i, $i * 2, $i * 3 ); my $n = $a + $b * 1000 + $c * 1000000; my $mask = 0; while ( $n >= 1 ) {

代码: 全选

        my $x = $n % 10;
        $n /= 10;

        last if $mask & ( 1 << $x );

        $mask |= 1 << $x;
    }

    say "$a $b $c" if $mask == 1022;
}
$_
头像
rubyish
渐入佳境
渐入佳境
帖子: 52
注册时间: 2018年04月23日 09:58
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 rubyish »

代码: 全选

last if $mask & ( 1 << $x );
上次由 523066680 在 2023年04月11日 17:35,总共编辑 1 次。
原因: 现在用 code 标签就可以啦
$_
头像
523066680
Administrator
Administrator
帖子: 573
注册时间: 2016年07月19日 12:14
联系:

Re: [题]1-9组成三个三位数,要求比值为1:2:3

帖子 523066680 »

rubyish 写了: 2023年04月09日 20:05

代码: 全选

last if $mask & ( 1 << $x );

老了思维退化了,你这个改动我还思考了蛮久的,大意是通过 and 操作符提前判断冲突的数字,减少循环次数。

回复

在线用户

正浏览此版面之用户: 没有注册用户 和 3 访客