NOIP 提高组初赛 · NOIP 2017 提高组初赛试题 第 23 题

选择题 · 答案 15 · 考点:输入输出、位运算、分支结构、循环结构

← 整套速查表 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;   
} 

输入:8 4 输出:_________

答案:15

考点

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

解题思维

看到递归拆分整数 → 先想非降序约束与枚举上界

常见错误

i 下界误写 0 或 1 破坏非降序;上界误写 m 导致死循环;忘记传 i 作下一层 x。

详细解析(节选)

考点:递归枚举(整数拆分)

程序在做什么

输入 m,n,调用 g(m,n,0) 计算将 m 拆成 n 个非降序正整数的方案数。

同考点真题

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