【CSP初赛】程序阅读15
文章目录
- 前置知识
- 题目
- 题目分析
- 打表
- 正确答案
- 总结
前置知识
C++ 基础、递归函数
题目
#include <bits/stdc++.h>
using namespace std;
int n, m;int func(int n, int m)
{if (n == 0) return m;if (m == 0) return n;return func(n - 1, m) + func(n, m - 1) + func(n - 1, m - 1);
}int main(){cin >> n >> m;cout << func(n, m) << endl;return 0;
}
程序输入为 5 6,
输出为 __________________
题目分析
这一题其实是 NOIP2018 阅读程序题的变种,稍有改动,改动在于递归公式原本为 func(n - 1, m) - func(n, m - 1) + func(n - 1, m - 1)
,现在为 func(n - 1, m) + func(n, m - 1) + func(n - 1, m - 1)
。第一次运算从减法变成了加法。
遇到递归的题目就只能打表了,没有什么好的办法。
打表时可以从小答案一步步算起,这样算更大的答案时可以参照前面得出的答案,节省效率。
打表时要注意加号减号,计算准确率要高,别算错数。
打表
func(0,0)=0 func(0,1)=0 func(0,2)=0 func(0,3)=0 func(0,4)=0 func(0,5)=0 func(0,6)=0
func(1,0)=0 func(1,1)=2 func(1,2)=5 func(1,3)=10 func(1,4)=17 func(1,5)=26 func(1,6)=37
func(2,0)=0 func(2,1)=5 func(2,2)=12 func(2,3)=27 func(2,4)=54 func(2,5)=97 func(2,6)=160
func(3,0)=0 func(3,1)=10 func(3,2)=27 func(3,3)=66 func(3,4)=147 func(3,5)=298 func(3,6)=555
func(4,0)=0 func(4,1)=17 func(4,2)=54 func(4,3)=147 func(4,4)=360 func(4,5)=805 func(4,6)=1658
func(5,0)=0 func(5,1)=26 func(5,2)=97 func(5,3)=298 func(5,4)=805 func(5,5)=1970 func(5,6)=4433
正确答案
程序输出为 4433.
总结
以上为【CSP初赛练习】程序阅读15 的习题解析,希望大家喜欢!