这个系列是我用来练习 Perl 编程的一些自己写的非常简陋的代码。
全部习题来自 POJ 项目,原题目要求使用 C/C++ 实现。
问题描述
一个笼子里面关了鸡和兔子(鸡有2 只脚,兔子有4 只脚,没有例外)。已经知道了笼子里面脚的总数a,问笼子里面至少有多少只动物,至多有多少只动物?
输入数据{{2}}
第1行是测试数据的组数 n,后面跟着 n 行输入。每组测试数据占 1 行,包括一个正整数a (a < 32768)。 输出要求 n 行,每行输出对应一个输入。输出是两个正整数,第一个是最少的动物数,第二个是最多的动物数,两个正整数用空格分开。如果没有满足要求的情况出现,则输出2个0。
输入样例
2
3
20
输出样例
0 0
5 10
代码
#! usr/bin/perl
use strict;
use warnings;
use POSIX;
use 5.010;
sub calc_prog {
my @num_of_animals;
# my $alert_input;
# my $num_of_feet;
for (@_) {
if ($_%2 != 0){
push @num_of_animals, (0,0);
}
else {
push @num_of_animals, (ceil($_/4));
push @num_of_animals, $_/2;
}
}
@num_of_animals;
}
my @number_input;
my @number_output;
print "Please input the number of feet!\n";
@number_input = (<STDIN>);
@number_output = calc_prog(@number_input);
my $flag;
for ($flag = 0; $flag < @number_output; $flag++) {
if ($flag%2 == 0){
print "$number_output[$flag] ";
}
else {
print "$number_output[$flag]\n";
}
}
# Lines_in {{3}}
# my $number_input;
# my @number_output;
# print "Please input the number of feet!\n";
# my $flag;
# while ($number_input = (<STDIN>)) {
# @number_output = calc_prog($number_input);
# for ($flag = 0; $flag < @number_output; $flag++) {
# if ($flag%2 == 0){
# print "$number_output[$flag] ";
# }
# else {
# print "$number_output[$flag]\n";
# }
# }
# }
[[2]] 这里我略微修改了题目,改为不需要输入测试组数。 [[2]]
[[3]] 这里有一个很棘手而且我没有解决的问题。这里会把所有输入先存储起来,再输出,想要逐行处理的话,暂时没想到符合要求的做法。在下面被注释掉的代码里我尝试实现逐行处理,但又达不到原题目的一次输入的要求了。[[3]]