zoukankan      html  css  js  c++  java
  • 递归的函数 (三维数组)

    题目描述

    给定一个函数 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 main()
    {
        int i,j,k;
        int s[21][21][21];
        for(i=0,j=0; j<21; j++)//下面是初始化过程。
            for(k=0; k<21; k++)
                s[i][j][k]=1;
        for(i=0,j=0; i<21; i++)
            for(k=0; k<21; k++)
                s[i][j][k]=1;
        for(k=0,j=0; j<21; j++)
            for(i=0; i<21; i++)
                s[i][j][k]=1;
        for(k=1; k<21; k++)//循环给数组赋值
            for(j=1; j<21; j++)
                for(i=1; i<21; i++)
                    if(i<j&&j<k)
                        s[i][j][k]=s[i][j][k-1]+s[i][j-1][k-1]-s[i][j-1][k];
                    else
                        s[i][j][k]=s[i-1][j][k]+s[i-1][j-1][k]+s[i-1][j][k-1]-s[i-1][j-1][k-1];
        while(scanf("%d%d%d",&i,&j,&k)!=EOF)
        {
            if(i<1||j<1||k<1)//判断分类输出
                printf("1\n");
            else if(i>20||j>20||k>20)
                printf("%d\n",s[20][20][20]);
            else
                printf("%d\n",s[i][j][k]);
        }
        return 0;
    }
     
  • 相关阅读:
    站立会议第七天
    站立会议第六天
    站立会议第五天
    站立会议第四天
    inotify简题
    搭建企业版yum仓
    ssh及ssh-key
    shell变量
    如何下载scp、wget、inotify及如何偷包
    rsync
  • 原文地址:https://www.cnblogs.com/kongkaikai/p/3133852.html
Copyright © 2011-2022 走看看