文章

【GESP】C++一级练习BCQM3052,鸡兔同笼

GESP一级知识点:for循环和if的应用。

BCQM3052

题目要求

描述

数学中经典的“鸡兔同笼”问题,已知头共x个,脚共y只,问笼中的鸡和兔各有多少只?

输入

头和脚的数量。

输出

鸡和兔各自数量。一个空格隔开。

输入样例

30 90

输出样例

15 15


题目分析

小学典型鸡兔同笼问题。这里最快速直观的方法当然是用解数学应用的题的思维,求出鸡和兔的数量,但我觉得这样就是纯数学式子,程序的思维太弱化了。因此我让孩子用穷举法进行了编程,即从1开始数到头数,判单每组情况是否满足题意(脚的情况),如果满足就是答案。

代码参考

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
using namespace std;
int main() {
    int x, y; // 声明 x: 头数, y: 脚数
    cin >> x >> y; // 输入总头数和总脚数
    int chicken, rabbit;
    // 穷举鸡的数量,从 0 一直尝试到 x
    for (int i = 0; i <= x; i++) {
        chicken = i; // 假设当前鸡的数量为 i
        rabbit = x - chicken; // 那么兔子的数量就是总头数减去鸡的数量
        // 检查头和脚的数量是否满足题意(鸡有 2 只脚,兔子有 4 只脚)
        if (chicken + rabbit == x && chicken * 2 + rabbit * 4 == y) {
            cout << chicken << " " << rabbit; // 输出符合条件的鸡和兔的数量
        }
    }
    return 0;
}

附一个纯数学方法计算的代码

代码参考-数学方法

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
using namespace std;
int main() {
    int x, y; // 声明 x: 头数, y: 脚数
    cin >> x >> y; // 输入总头数和总脚数
    int chicken, rabbit;
    // 假设全部是兔子,那么有 x * 4 只脚
    // 实际少出来的脚数 (x * 4 - y) 就是因为把鸡当成了兔子,每只鸡少 2 只脚
    chicken = (x * 4 - y) / 2;
    rabbit = x - chicken; // 兔子的数量为总头数减去鸡的数量
    cout << chicken << " " << rabbit; // 输出鸡和兔的数量
    return 0;
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

GESP 学习专题站:GESP WIKI

luogu-”系列题目可在洛谷题库进行在线评测。

bcqm-”系列题目可在编程启蒙题库进行在线评测。

欢迎加入Java、C++、Python技术交流QQ群(982860385),大佬免费带队,有问必答

欢迎加入C++ GESP/CSP认证学习QQ频道,考试资源总结汇总

欢迎加入C++ GESP/CSP学习交流QQ群(688906745),考试认证学员交流,互帮互助

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
本文由作者按照 CC BY-NC-SA 4.0 进行授权