Exercise 2-1 鸡兔同笼问题

这个系列是我用来练习 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]]

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据