如何用perl将1—100之间的100个数字平均分成五组?

2个回答

  • use strict;

    #原始序列

    my @arr = 1..100;

    #新的三个暂用序列

    my @a;

    my @b;

    my @c;

    # 从3到N的序列的随机平均分配.

    while (@arr > 2) {

    my $idx_a = 0;

    my $idx_b = 0;

    my $idx_c = 0;

    $idx_a = int(rand($#arr + 1));

    do {

    $idx_b = int(rand($#arr + 1));

    } while ($idx_a == $idx_b);

    do {

    $idx_c = int(rand($#arr + 1));

    } while ($idx_c == $idx_a || $idx_c == $idx_b);

    push(@a, $arr[$idx_a]);

    push(@b, $arr[$idx_b]);

    push(@c, $arr[$idx_c]);

    undef $arr[$idx_a];

    undef $arr[$idx_b];

    undef $arr[$idx_c];

    my @tmp = ();

    for(my $j = 0; $j < @arr; $j++) {

    push(@tmp, $arr[$j]) if defined $arr[$j];

    }

    @arr = @tmp;

    }

    # 最后1个或者2个的随机分配

    my $idx_1 = int(rand(3));

    my $idx_2 = 0;

    do {

    $idx_2 = int(rand(3));

    } while ($idx_1 == $idx_2);

    if (@arr == 1) {

    push(@a, $arr[0]) if $idx_1 == 0;

    push(@b, $arr[0]) if $idx_1 == 1;

    push(@c, $arr[0]) if $idx_1 == 2;

    } elsif (@arr == 2) {

    push(@a, $arr[0]) if $idx_1 == 0;

    push(@b, $arr[0]) if $idx_1 == 1;

    push(@c, $arr[0]) if $idx_1 == 2;

    push(@a, $arr[1]) if $idx_2 == 0;

    push(@b, $arr[1]) if $idx_2 == 1;

    push(@c, $arr[1]) if $idx_2 == 2;

    }

    print @a;

    print @b;

    print @c;

    #至于perl中的 rand() 函数效率就当它是浮云吧.