循环递增值的三部分增加超过其限制

时间:2014-01-05 02:49:54

标签: perl for-loop increment nested-loops

我正在用Perl编写一些代码来测试数字并确定它们的所有数字是完全偶数还是完全奇数。我使用$ARGV[0] = 3$ARGV[1] = 1运行了该计划。我遇到了一些麻烦,并在每次外循环通过时添加了一行来检查$n的值。 $n的值为1,2和2.我想知道为什么$n增加到1。

这是我的代码:

#!/usr/bin/perl
use warnings;

my $even = 0;
my $odd = 0;
my $limit = $ARGV[0]; #highest number considered
my $places = $ARGV[1]; #number of places in said number

for($x = 1; $x <= $limit; $x++){

my @z;

my $tot = 0;

my $c = $x;

for($n = 1; $n <= $places; $n++){
    $z[$n] = $c % 2;
    $tot = $tot + $z[$n];
    $c = $c - $z[$n];
    if($c == 0){
        last;
    }
    $c = $c / 10;
}

print $n;

if ($tot == 0) {
    $even++;
}elsif($tot == 1) {
    $odd++;
}

}

print $even . "\n";
print $odd; 

我之前没有使用Perl编码,如果它有点不合适,那就很抱歉。

2 个答案:

答案 0 :(得分:2)

您在循环后打印$n的值。在循环$n递增(1)之后,循环$n的第一次迭代设置为$n++,然后$n <= $places看到2 > 1所以for循环终止,因此打印2

答案 1 :(得分:2)

我正在用Perl编写一些代码来测试数字并确定它们的所有数字是完全偶数还是完全奇数。

以下内容并未回答您的问题,但也许它会有所帮助:

use strict;
use warnings;

my $n = 2468;
my $c;

$c += $_ % 2 for split '', $n;

if ( !$c) {
    print "$n has all even digits.\n";
}
elsif ( $c  == length $n ) {
    print "$n has all odd digits.\n";
}
else {
    print "$n has a mixture of even and odd digits.\n";
}

split ''将数字拆分为数字,$c += $_ % 2每个都完成forEven mod 2会返回0,因此如果$c为零,则该数字只有偶数。 Odd mod 2会返回1,因此如果$c与字符串$n的长度相同,则数字只有奇数位。否则,该数字由偶数和奇数的混合组成。