NOIP 普及组初赛 · NOIP 2017 普及组初赛试题 第 24 题

阅读程序 · 答案 8 · 考点:输入输出、位运算、分支结构、循环结构

← 整套速查表 NOIP 普及组初赛 全部真题

题目

阅读程序写结果:

#include<iostream>
using namespace std;
int g(int m, int n, int x)
{
    int ans = 0;
    int i;
    if (n == 1)
        return 1;
    for (i = x; i <= m / n; i++)
        ans += g(m - i, n - 1, i);
    return ans;
}
int main()
{
    int t, m, n;
    cin >> m >> n;
    cout << g(m, n, 0) << endl;
    return 0;
}

输入:7 3 输出:_________

答案:8

考点

输入输出位运算 讲解 →位运算 真题汇总 →分支结构循环结构

解题思维

看到递归拆分整数 → 先想‘非递减排列’的枚举边界(i≤m/n)。

常见错误

易混 n=1 边界(应返回 1 而非 0);循环上限 m/n 写错会漏算;递归传参 i 保证非递减。

详细解析(节选)

考点:递归枚举|整数划分

程序在做什么

输入 m,n,调用 g(m,n,0) 计算把 m 拆成 n 个非负整数且非递减排列的方案数。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断