递归函数
内存限制: 128 MiB 时间限制: 1000 ms 标准输入输出 题目类型: 传统 评测方式: 文本比较
题目描述
对于一个递归函数 w ( a, b, c )。
如果 a <= 0 or b <= 0 or c <= 0 就返回值 1。
如果 a > 20 or b > 20 or c > 20 就返回 w( 20, 20, 20 )。
如果 a < b 并且 b < c 就返回 w ( a, b, c − 1 ) + w ( a, b − 1, c − 1 ) − w ( a, b − 1, c ),
其它别的情况就返回 w ( a − 1, b, c ) + w ( a − 1, b − 1, c ) + w ( a − 1, b, c − 1 ) − w ( a −1, b - 1, c - 1 )
这是个简单的递归函数,但实现起来可能会有些问题。
输入格式
会有若干行,每行三个数,表示 a, b, c。并以 −1, −1, −1 结束
输出格式
输出若干行
样例
样例输入
复制1 1 1
2 2 2
-1 -1 -1
样例输出
复制w(1,1,1)=2
w(2,2,2)=4
数据范围与提示
|a|, |b|, |c| < 30
#include <bits/stdc++.h>
using namespace std;
int a, b, c;
int n[65][65][65];
int w(int x, int y, int z) {
if(n[x + 30][y + 30][z + 30] != 0) {
return n[x + 30][y + 30][z + 30];
}
if(x <= 0 || y <= 0 || z <= 0) {
return n[x + 30][y + 30][z + 30] = 1;
}
if(x > 20 || y > 20 || z > 20) {
return n[x + 30][y + 30][z + 30] = w(20, 20, 20);
}
if(x < y && y < z) {
return n[x + 30][y + 30][z + 30] = w(x, y, z - 1) + w(x, y - 1, z - 1) - w(x, y - 1, z);
}
return n[x + 30][y + 30][z + 30] = w(x - 1, y, z) + w(x - 1, y - 1, z) + w(x - 1, y, z - 1) - w(x - 1, y - 1, z - 1);
}
int main() {
while(scanf("%d %d %d", &a, &b, &c)) {
if(a == -1 && b == -1 && c == -1) {
break;
}
printf("w(%d,%d,%d)=%d\n", a, b, c, w(a, b, c));
}
return 0;
}
这道题真的 so easy,直接把题目条件照抄就可以了