我正在尝试编写一个程序来完成以下任务:
使用循环结构并编写产生以下输出的程序(使用一个参数让用户指定需要打印的行数):
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++;
}
答案 0 :(得分:2)
当我运行它时,我收到此错误:
无法在行...
修改非左值子程序调用
你使用了错误的印记。变化:
&j++;
为:
$j++;
此外,您可能需要\n
而不是/n
。
答案 1 :(得分:0)
这个程序就像你问的那样。它希望列表条目的数量作为参数传递到命令行,如果指定了non,则默认为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
答案 2 :(得分: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++;
}