🤔蓝蓝计算机考研算法-day11鸡兔同笼问题

583 阅读1分钟

Day06 2023/03/04

难度:简单

题目

已知鸡和兔的总数量为n,总腿数为m。输入n和m,依次输出鸡和兔的数目,如果无解,则输出 “No answer'”不要引号)

  • 输入:第一行输入一个数据a,代表接下来共有几组数据,在接下来的(a<l0)、a行里,每行都有1个n和m。(0<m,n<100)

  • 输出:输出鸡兔的个数,或者No answer

示例1

输入: 1 35 94
输出:鸡的数量为:23 兔的数量为:12
说明:输入第一个表示测试1组数据,第二个表示总数量,第三个表示总腿数;然后计算输出鸡和兔各自的数量。

运行实例

image.png

思路


本题实质是解一个二元一次方程组,假设共有鸡X只,兔Y只,其中n为鸡兔总数量,m为鸡兔总腿数,由此可得方程组为:{x+y=n2x+4y=m\begin{cases} x+y=n\\ 2x+4y=m \end{cases}, 解方程组得:{x=2nm/2y=m/2n\begin{cases} x = 2n - m/2 \\ y = m/2 - n \end{cases},故鸡和兔的数量就通过一个二元一次方程组解出来了(easy!!!😎)

关键点


  • 当m(总腿数)不为偶数或者鸡或者兔的数量小于0的时候输出“no anwser”

算法实现


c++代码实现-鸡兔同笼

#include <iostream>
using namespace std;

// 鸡兔同笼问题
int main() {
    // 设鸡的数量为x, 兔的数量为y, m为总腿数, n为总数量, a为共测几组数据
    int x = 0, y = 0, m = 0, n = 0, a = 0; 
    cin >> a;       // 测试a组数据
    while (a-- &&  cin >> n >> m) {
        x = 2*n - m/2;  // 鸡的数量
        y = m/2 - n;    // 兔的数量
        if (m % 2 != 0 || x < 0 || y < 0) cout << "No Answer!";
        else cout << "鸡的数量为:" << x << " 兔的数量为:" << y <<endl;  // 打印  
    }
    return 0;
}
  • 时间复杂度 O(1)O(1)--- 不考虑输入数据所占用的时间,其他为常数级
  • 空间复杂度 O(1)O(1)--- 仅含常数级的变量,除此无额外的辅助空间

总结

本题依旧比较简单,与其说是算法题,不如说是一道经典的数学题,更加侧重的是数学方面的问题,代码实现不难!!!