标签:http sam lib closed 数学 esc hint amp 等级
对于一个递归函数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)
这是个简单的递归函数,但实现起来可能会有些问题。
会有若干行.每行三个数,表示a, b, c。并以?1, ?1, ?1结束
输出若干行,注意各种中的空格。
1 1 1
2 2 2
-1 -1 -1
w(1, 1, 1) = 2
w(2, 2, 2) = 4
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; }
标签:http sam lib closed 数学 esc hint amp 等级
原文地址:http://www.cnblogs.com/ruojisun/p/6159042.html