递归的函数Time Limit: 1000MS Memory limit: 65536K
题目描述
给定一个函数 f(a, b, c):如果 a ≤ 0 或 b ≤ 0 或 c ≤ 0 返回值为 1;如果 a > 20 或 b > 20 或 c > 20 返回值为 f(20, 20, 20);如果 a < b 并且 b < c 返回 f(a, b, c−1) + f(a, b−1, c−1) − f(a, b−1, c);其它情况返回 f(a−1, b, c) + f(a−1, b−1, c) + f(a−1, b, c−1) − f(a-1, b-1, c-1)。看起来简单的一个函数?你能做对吗?输入
输入包含多组测试数据,对于每组测试数据:输入只有一行为 3 个整数a, b, c(a, b, c < 30)。输出
对于每组测试数据,输出函数的计算结果。示例输入
1 1 1 2 2 2示例输出
2 4#include <stdio.h> int s[30][30][30]; int f(int a,int b,int c) { if(a<=0||b<=0||c<=0) return 1; if(a>20||b>20||c>20) return s[20][20][20]=f(20,20,20); if(s[a][b][c]>0) return s[a][b][c]; if(a<b&&b<c) return s[a][b][c]=f(a,b,c-1)+f(a,b-1,c-1)-f(a,b-1,c); else return s[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1); } int main() { int x,y,z; while(scanf("%d%d%d",&x,&y,&z)!=EOF) { printf("%d\n",f(x,y,z)); } return 0; }
递归的函数
最新推荐文章于 2022-04-13 17:40:57 发布