首页 > 代码库 > 修行之路~扣得为艾斯1910递归函数

修行之路~扣得为艾斯1910递归函数

1910 递归函数

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 黄金 Gold
题目描述 Description

对于一个递归函数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)

这是个简单的递归函数,但实现起来可能会有些问题。

输入描述 Input Description

会有若干行.每行三个数,表示a, b, c。并以?1, ?1, ?1结束

输出描述 Output Description

输出若干行,注意各种中的空格。

样例输入 Sample Input

1 1 1
2 2 2
-1 -1 -1

样例输出 Sample Output

w(1, 1, 1) = 2
w(2, 2, 2) = 4

数据范围及提示 Data Size & Hint

a, b, c < 30, Task < 11

 传送门   ->> 

      ^

      |

这题用了数学思维 是我手(chao)写(xi)的。

技术分享
#include <iostream>
#include <cstdlib>
using namespace std;
int w(int a,int b,int c)
{
    if(a<=0||b<=0||c<=0) return 1;
    else if(a>20||b>20||c>20) return w(20,20,20);
    else if(a<=b||a<=c) 
    {
        int i=1;
        for(int j=0;j<a;j++)
        i*=2;
        return i;
    }
    else return w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1);
}
int main()
{
       int a[11][3],i,j;
       for(i=0;i<11;i++)
       {
              cin>>a[i][0]>>a[i][1]>>a[i][2];
              if(a[i][0]==-1&&a[i][1]==-1&&a[i][2]==-1) break;
       }
       for(j=0;j<i;j++)

               cout<<"w("<<a[j][0]<<", "<<a[j][1]<<", "<<a[j][2]<<") = "<<w(a[j][0],a[j][1],a[j][2])<<endl;
       return 0;
}
点击展开

 

修行之路~扣得为艾斯1910递归函数