1

我正在尝试编写一个程序来完成以下任务:

使用循环结构并编写产生以下输出的程序(使用一个参数让用户指定需要打印多少行):

A
AA
AAA
AAAB
AAABA
AAABAA
AAABAAA
AAABAAAB
...

我无法让我的程序正常运行。当我尝试运行它时,什么也没有发生。

#!/usr/local/bin/perl

$A = 3;
$B = 1;
$i = 1;
$output = "";
$j = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {
    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output.= "A";
      $A--;
    }
    else {
      $output.= "B";
      $B--;
    }

    &j++;
  }

  print($output  .  "/n");
  $i++;
}
4

3 回答 3

2

当我运行它时,我得到这个错误:

无法在行修改非左值子例程调用...

你用错了印记。改变:

&j++;

至:

$j++;

此外,您可能想要\n而不是/n.

于 2013-10-10T18:43:56.970 回答
0

该程序按您的要求执行。它期望列表条目的数量作为参数在命令行上传递,如果未指定,则默认为 8。

use strict;
use warnings;

my $max = shift // 8;

my $string;
my @strings;
push @strings, $string .= $_ & 3 ? 'A' : 'B' for 1 .. $max;

print "@strings\n";

输出

A AA AAA AAAB AAABA AAABAA AAABAAA AAABAAAB
于 2013-10-10T18:45:11.917 回答
0

如果您更改&j++$j++和更改print($output . "/n")为,print($output . "\n")那么您的程序将正常工作。但是它确实需要一些整理,像这样

$A      = 3;
$B      = 1;
$i      = 1;
$output = "";
$j      = 1;

while ($i <= $ARGV[0]) {
  while ($j <= $i) {

    if ($A == 0 && $B == 0) {
      $A = 3;
      $B = 1;
    }

    if ($A > 0) {
      $output .= "A";
      $A--;
    }
    else {
      $output .= "B";
      $B--;
    }

    $j++;
  }

  print($output . "\n");
  $i++;
}
于 2013-10-10T18:56:44.333 回答