【题目链接】
【题目考点】
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} 0≤x≤2a
兔子最少有0只,最多有 ⌊ a 4 ⌋ \lfloor \frac{a}{4} \rfloor ⌊4a⌋只,所以 0 ≤ y ≤ ⌊ a 4 ⌋ 0\le y \le \lfloor \frac{a}{4} \rfloor 0≤y≤⌊4a⌋
总结为:
- 枚举对象:x, y
- 枚举范围: 0 ≤ x ≤ a 2 0\le x \le \frac{a}{2} 0≤x≤2a, 0 ≤ y ≤ ⌊ a 4 ⌋ 0\le y \le \lfloor \frac{a}{4} \rfloor 0≤y≤⌊4a⌋
- 枚举条件: 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;
}