枚举
A 百钱买百鸡 1
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100 只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式: 输入一个正整数n。
输出格式: 如果有解,依次输出公鸡、母鸡、小鸡的个数(用正整数表示)。 如果无解,输出"No Answer."。
数据范围:1≤n≤200。
#include <iostream>
// 命名空间std
using namespace std;
int main() {
// 获取输入n
int n;
cin >> n;
// 布尔found用于标记是否找到解决方案
bool found = false;
// 枚举法:使用三重循环枚举所有可能的情况
for (int x = 0; x <= n; ++x) {
for (int y = 0; y <= n; ++y) {
int z = n - x - y; // 计算小鸡的数量
if (5 * x + 3 * y + z / 3 == n && z % 3 == 0) {
// 如果满足条件,输出解决方案
cout << x << " " << y << " " << z << endl;
found = true;
}
}
}
// 如果没有找到解决方案,输出"No Answer."
if (!found) {
cout << "No Answer." << endl;
}
return 0;
}
B 百钱买百鸡 2
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100 只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式: 输入一个正整数n。
输出格式: 如果有解,依次输出公鸡、母鸡、小鸡的个数(用正整数表示)。 如果无解,输出"No Answer."。
数据范围:1≤n≤2000。
#include <iostream>
// 命名空间std
using namespace std;
int main() {
// 获取输入n
int n;
cin >> n;
// 布尔found用于标记是否找到解决方案
bool found = false;
// 枚举法:使用三重循环枚举所有可能的情况
for (int x = 0; x <= n; ++x) {
for (int y = 0; y <= n; ++y) {
int z = n - x - y; // 计算小鸡的数量
if (5 * x + 3 * y + z / 3 == n && z % 3 == 0) {
// 如果满足条件,输出解决方案
cout << x << " " << y << " " << z << endl;
found = true;
}
}
}
// 如果没有找到解决方案,输出"No Answer."
if (!found) {
cout << "No Answer." << endl;
}
return 0;
}
/****************************************
* AAD2023-NJTECH
* @brief 枚举 - A/B - 百钱买百鸡
* @author ideallove
* @date 2023-10
*****************************************/
#include <iostream>
using namespace std;
int main() {
// 获取正整数 n
int n;
cin >> n;
// 记录解的数量
bool flag = false;
// 优化循环:解方程组,仅需一层循环
for (int x = 0; x <= n / 5; x++) {
int y = n / 4 - x * 7 / 4;
if (y >= 0 && 7 * x + 4 * y == n) {
cout << x << " " << y << " " << n - x - y << endl;
flag = true;
}
}
if (!flag) {
cout << "No Answer." << endl;
}
return 0;
}
C 百钱买百鸡 3
百钱买百鸡问题:公鸡五文钱一只,母鸡三文钱一只,小鸡三只一文钱,用 100 文钱买 100 只鸡,公鸡、母鸡、小鸡各买多少只?
本程序要求解的问题是:给定一个正整数 n,用 n 文钱买 n 只鸡,问公鸡、母鸡、小鸡各买多少只?
输入格式: 输入一个正整数n。
输出格式: 如果有解,输出有多少种解(可以用正整数表示的解)。 如果无解,输出"No Answer."。
数据范围:1≤n≤10^8。
注意这里的数据范围,需要最优化的方法才能通过测试。
/****************************************
* AAD2023-NJTECH
* @brief 枚举 - C - 百钱买百鸡(三)
* @author ideallove
* @date 2023-10
*****************************************/
#include <iostream>
using namespace std;
int main() {
// 获取正整数 n
int n;
cin >> n;
// 记录解的数量
int count = 0;
// 优化循环:解方程组,仅需一层循环
for (int x = 0; x <= n / 5; x++) {
int y = n / 4 - x * 7 / 4;
if (7 * x + 4 * y == n && y >= 0) {
count++;
}
}
if (count == 0) {
cout << "No Answer." << endl;
} else {
cout << count << endl;
}
return 0;
}