C - 递归的函数

    xiaoxiao2021-03-25  135

    Description

    给定一个函数 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)。 看起来简单的一个函数?你能做对吗?

    Input

    输入包含多组测试数据,对于每组测试数据: 输入只有一行为 3 个整数a, b, c(a, b, c < 30)。

    Output

    对于每组测试数据,输出函数的计算结果。

    Sample Input

    1 1 1 2 2 2

    Sample Output

    24

    #include <iostream> using namespace std ; int f [ 21 ][ 21 ][ 21 ]; int main () { int x ,y ,z ,i ,j ,k ; for (i = 0 ;i < 21 ;i ++) for (j = 0 ;j < 21 ;j ++) for (k = 0 ;k < 21 ;k ++) { if (i == 0 ||j == 0 ||k == 0 ) f [i ][j ][k ]= 1 ; else if (i <j &&j <k ) f [i ][j ][k ]=f [i ][j ][k -1 ]+f [i ][j -1 ][k -1 ]-f [i ][j -1 ][k ]; else f [i ][j ][k ]=f [i -1 ][j ][k ]+f [i -1 ][j -1 ][k ]+f [i -1 ][j ][k -1 ]-f [i -1 ][j -1 ][k -1 ]; } while (cin >>x >>y >>z ) { if (x <= 0 ||y <= 0 ||z <= 0 ) cout << "1" <<endl ; else if (x > 20 ||y > 20 ||z > 20 ) cout <<f [ 20 ][ 20 ][ 20 ]<<endl ; else cout <<f [x ][y ][z ]<<endl ; } return 0 ; } 这个题看似是一个简单的递归,但是如果直接写的话就会超时,所以要把每一个答案都放在数组里才能通过。
    转载请注明原文地址: https://ju.6miu.com/read-11005.html

    最新回复(0)