刚开始学习Python语法,还是习惯去oj刷题,遇到问题再去解决比较深刻。h
下面这个题主要学习了函数和数组的定义。
http://acm.sdut.edu.cn/onlinejudge2/index.php/Home/Index/problemdetail/pid/2176.html
先说下,Python的循环
range()函数,创建一个整数列表
for i in range(10):
sum+=i;
一个简单的递归题目,要边递归边存,不然会出现超时。
#coding=utf-8
def getValue(a,b,c):
if x[a][b][c]<>-1:
print("("+str(a)+","+str(b)+","+str(c)+")="+str(x[a][b][c]));
return x[a][b][c];
elif a<=0 or b<=0 or c<=0 :
x[a][b][c]=1;
return 1;
elif a>20 or b>20 or c>20 :
print("===");
x[a][b][c] = getValue(20, 20, 20);
return x[a][b][c];
elif a<b and b<c :
x[a][b][c]=getValue(a,b,c-1)+getValue(a,b-1,c-1)-getValue(a,b-1,c);
return x[a][b][c];
else:
x[a][b][c] = getValue(a - 1, b, c) + getValue(a - 1, b - 1, c) + getValue(a - 1, b, c - 1) - getValue(a - 1, b - 1, c - 1);
return x[a][b][c];
x=[[[-1]*40]*40]*40;
while True:
a=map(int,raw_input().split());
print(a[0] if a[0]>0 else 0,a[1] if a[1]>0 else 0,a[2] if a[2]>0 else 0);
print(getValue(a[0] if a[0]>0 else 0,a[1] if a[1]>0 else 0,a[2] if a[2]>0 else 0));
print(x);
以上的代码是WA的。
问题在多维数组的定义。这个是数组的浅拷贝,一个值改变后其他的复制的值也会改变。
改成下面这种定义就可以了。
x=[[[-1 for i in range(30)] for i in range(30)] for i in range(30)];
当然还有导入
NumPy数据库的方式,里面有很多的函数可以直接调用。