OpenJudge NOI 2.1 1752:鸡兔同笼

【题目链接】

OpenJudge NOI 2.1 1752:鸡兔同笼

【题目考点】

1. 枚举

【解题思路】

解法1:枚举

设有鸡x只,兔子y只,已知有a只脚,那么有
2 x + 4 y = a 2x+4y=a 2x+4y=a
鸡最少有0只,当所有的脚都是鸡脚时,鸡最多,有 a 2 \frac{a}{2} 2a只,所以 0 ≤ x ≤ a 2 0\le x \le \frac{a}{2} 0x2a
兔子最少有0只,最多有 ⌊ a 4 ⌋ \lfloor \frac{a}{4} \rfloor 4a只,所以 0 ≤ y ≤ ⌊ a 4 ⌋ 0\le y \le \lfloor \frac{a}{4} \rfloor 0y4a
总结为:

  • 枚举对象:x, y
  • 枚举范围: 0 ≤ x ≤ a 2 0\le x \le \frac{a}{2} 0x2a 0 ≤ y ≤ ⌊ a 4 ⌋ 0\le y \le \lfloor \frac{a}{4} \rfloor 0y4a
  • 枚举条件: 2 x + 4 y = a 2x+4y=a 2x+4y=a
    选择所有满足条件的x与y中,x+y的最大与最小值。

解法2:找规律

如果输入的脚的数量为奇数,那么没有满足要求的答案。
当有尽量多的鸡时,动物应该是最多的。当有尽量多的兔子时,动物应该是最少的。
鸡最多为 a 2 \frac{a}{2} 2a,那么动物最多为 a 2 \frac{a}{2} 2a
兔子最多为 ⌊ a 4 ⌋ \lfloor \frac{a}{4} \rfloor 4a,剩下 a % 4 a\%4 a%4只脚都是鸡,有 a % 4 2 \frac{a\%4}{2} 2a%4只,此时动物最少,有 ⌊ a 4 ⌋ + a % 4 2 \lfloor \frac{a}{4} \rfloor+\frac{a\%4}{2} 4a+2a%4只。

【题解代码】

解法1:枚举

#include<bits/stdc++.h>
using namespace std;
#define INF 0x3f3f3f3f
int main()
{
    
    
    int a, mx = 0, mn = INF;
    cin >> a;
    for(int x = 0; x <= a/2; ++x)
        for(int y = 0; y <= a/4; ++y)
        {
    
    
            if(2*x+4*y == a)
            {
    
    //更新最大值与最小值
                mx = max(mx, x+y); 
                mn = min(mn, x+y);
            }
        }
    if(mx == 0 && mn == INF)//如果没有找到 
        cout << "0 0";
    else
        cout << mn << ' ' << mx;
    return 0;
}

解法2:找规律

#include<bits/stdc++.h>
using namespace std;
int main()
{
    
    
    int a;
    cin >> a;
    if(a % 2 == 1) 
        cout << "0 0";
    else
        cout << a/4+a%4/2 << ' ' << a/2;
    return 0;
}

猜你喜欢

转载自blog.csdn.net/lq1990717/article/details/125649636