top1编程
← 返回题目
题解

【入门】怎样种树?

1 条题解

  • 0
    @ 2026-7-31 15:27:03

    解题思路

    总共 n 棵树,三种树都要有且都是偶数,还要满足桃树数量 ≤ 梨树 ≤ 苹果树。输出所有可能的组合。

    思路:枚举。

    1. 枚举桃树数量 i(偶数,从 2 开始)
    2. 枚举梨树数量 j(偶数)
    3. 枚举苹果树数量 k(偶数)
    4. 检查条件:
      • i + j + k 等于总数 n
      • j ≥ i(梨树不少于桃树)
      • k ≥ j(苹果树不少于梨树)
    5. 满足就输出

    为什么每种至少 2? 因为三种都要有且数量都是偶数,最小偶数就是 2。

    举例 n=18:

    • 2 2 14、2 4 12、2 6 10、2 8 8、4 4 10、4 6 8、6 6 6

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        int n;
        cin >> n;
    
        for (int i = 2; i <= n - 4; i += 2) {  // 桃树
            for (int j = 2; j <= n - 4; j += 2) {  // 梨树
                for (int k = 2; k <= n - 4; k += 2) {  // 苹果树
                    if (i + j + k == n && j >= i && k >= j) {
                        cout << i << " " << j << " " << k << endl;
                    }
                }
            }
        }
        return 0;
    }
    

    复杂度分析

    • 时间复杂度:O(N³),三重枚举
    • 空间复杂度:O(1)
    • 1