递归的函数

来源:互联网 发布:学生打工软件 编辑:程序博客网 时间:2024/04/29 11:53

递归的函数

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 12 2 2

示例输出

24

提示


#include <stdio.h>int main(){    int a[30][30][30];    int i, j, k;    for(i = 0;i <= 20;i++){        for(j = 0;j <=20;j++){            for(k = 0;k <= 20;k++){                if(i ==0||j==0||k==0){                    a[i][j][k] = 1;                }else if(i <j &&j < k){                    a[i][j][k] = a[i][j][k-1] + a[i][j-1][k-1] - a[i][j-1][k];                }else {                    a[i][j][k] = a[i-1][j][k] + a[i-1][j-1][k] + a[i-1][j][k-1] - a[i-1][j-1][k-1];                }            }        }    }    int x, y, z;    while(~scanf("%d %d %d", &x, &y, &z)){        int sum;        if(x<=0||y<=0||z<=0){            sum = 1;        }else if(x > 20||y>20||z>20){            sum = a[20][20][20];        }else {            sum = a[x][y][z];        }        printf("%d\n", sum);    }    return 0;}

0 0
原创粉丝点击