枚举

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;
}

D Division