您的位置:首页 > 其它

[从头学数学] 第65节 四则运算

2016-01-27 16:44 211 查看
剧情提要:

[机器小伟]在[工程师阿伟]的陪同下进入练气期第八层功法的修炼,

这次要修炼的目标是[四则运算]。

正剧开始:

星历2016年01月27日 14:45:58, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和[机器小伟]一起学习四则运算。



什么是加法呢?



什么是减法呢?



什么是乘法呢?



什么是除法呢?



小伟又看到了关于0的运算。



还有这个游戏:



能找到几组呢,小伟来了兴趣:

<span style="font-size:18px;">>>>
第1行,第1列为起点的2*2矩形内的数和是340。
第1行,第2列为起点的2*2矩形内的数和是340。
第1行,第3列为起点的2*2矩形内的数和是340。
第2行,第1列为起点的2*2矩形内的数和是340。
第2行,第2列为起点的2*2矩形内的数和是340。
第2行,第3列为起点的2*2矩形内的数和是340。
第3行,第1列为起点的2*2矩形内的数和是340。
第3行,第2列为起点的2*2矩形内的数和是340。
第3行,第3列为起点的2*2矩形内的数和是340。

def tmp():
a = [[10,80,100,150],[140,110,50,40],[70,20,160,90],[120,130,30,60]];
for i in range(3):
for j in range(3):
if a[i][j]+a[i][j+1]+a[i+1][j]+a[i+1][j+1]==340:
print('第{0}行,第{1}列为起点的2*2矩形内的数和是340。'.format(i+1,j+1));
return;

结果说明整个4*4矩阵内的数都是符合相邻数和等于340这个规律的。</span>


一共有九组,但其实还不止这些,如果围成一个圆筒来看,应该是12组。















[人叫板老师]给的这个24的题,其实有好几种答案:

<span style="font-size:18px;">>>>
给出[6, 2, 3, 4],算式6*2+3*4=24
给出[6, 2, 3, 4],算式(6*2)+3*4=24
给出[6, 2, 3, 4],算式6*2+(3*4)=24
给出[6, 2, 3, 4],算式(6*2)+(3*4)=24
给出[6, 2, 3, 4],算式(6/2+3)*4=24</span>


<span style="font-size:18px;"># 算24
def tmp():
op = ['+', '-', '*', '/'];
a = [6, 2,3,4];
for i in range(4):
for j in range(4):
for k in range(4):
s =[];
s0 = str(a[0])+op[i]+str(a[1])+op[j]+str(a[2])+op[k]+str(a[3]);
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+')'+op[j]+str(a[2])+op[k]+str(a[3]);
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+op[j]+str(a[2])+')'+op[k]+str(a[3]);
s.append(s0);
s0 = str(a[0])+op[i]+'('+str(a[1])+op[j]+str(a[2])+')'+op[k]+str(a[3]);
s.append(s0);
s0 = str(a[0])+op[i]+'('+str(a[1])+op[j]+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);
s0 = str(a[0])+op[i]+str(a[1])+op[j]+'('+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+')'+op[j]+'('+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);

for m in range(len(s)):
result = eval(s[m]);
intresult = int(result);

if intresult == 24 and abs(intresult - result) < 0.0001:
print('给出{0},算式{1}={2}'.format(a, s[m], intresult));
solve = 1;

return;</span>


小伟早就想要算一算24了,这是一个历史悠久的游戏:

<span style="font-size:18px;">>>>
[8, 8, 4, 3] 无解。
给出[12, 3, 13, 4],算式12+3+13-4=24
给出[6, 9, 6, 2],算式(6*9-6)/2=24
给出[9, 3, 12, 8],算式(9-3)*(12-8)=24
[7, 1, 7, 7] 无解。
[13, 3, 4, 7] 无解。
[11, 5, 10, 5] 无解。
给出[1, 4, 2, 8],算式(1+4-2)*8=24
[11, 1, 11, 7] 无解。
给出[3, 2, 3, 6],算式(3-2+3)*6=24

# 算24
def tmp():
op = ['+', '-', '*', '/'];
a = [6, 2,3,4];
solve = 0;

import random;

for play in range(10):
solve = 0;
a = [];
for num in range(4):
a.append(random.randrange(1,14));

for i in range(4):
if solve > 0:
break;
for j in range(4):
if solve > 0:
break;
for k in range(4):
if solve > 0:
break;
s =[];
s0 = str(a[0])+op[i]+str(a[1])+op[j]+str(a[2])+op[k]+str(a[3]);
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+')'+op[j]+str(a[2])+op[k]+str(a[3]);
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+op[j]+str(a[2])+')'+op[k]+str(a[3]);
s.append(s0);
s0 = str(a[0])+op[i]+'('+str(a[1])+op[j]+str(a[2])+')'+op[k]+str(a[3]);
s.append(s0);
s0 = str(a[0])+op[i]+'('+str(a[1])+op[j]+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);
s0 = str(a[0])+op[i]+str(a[1])+op[j]+'('+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);
s0 = '('+str(a[0])+op[i]+str(a[1])+')'+op[j]+'('+str(a[2])+op[k]+str(a[3])+')';
s.append(s0);

for m in range(len(s)):
if solve > 0:
break;
try:
result = eval(s[m]);
intresult = int(result);

if intresult == 24 and abs(intresult - result) < 0.0001:
print('给出{0},算式{1}={2}'.format(a, s[m], intresult));
solve = 1;
except:
pass;

if (solve == 0):
print('{0} 无解。'.format(a));

return;</span>


而用4个3得到的算式,因为没有用括号,就有下面这些:

<span style="font-size:18px;">>>>
给出[3, 3, 3, 3],算式3+3-3-3=0
给出[3, 3, 3, 3],算式3-3+3-3=0
给出[3, 3, 3, 3],算式3-3-3+3=0
给出[3, 3, 3, 3],算式3-3*3/3=0
给出[3, 3, 3, 3],算式3-3/3*3=0
给出[3, 3, 3, 3],算式3*3-3*3=0
给出[3, 3, 3, 3],算式3*3/3-3=0
给出[3, 3, 3, 3],算式3/3-3/3=0
给出[3, 3, 3, 3],算式3/3*3-3=0
给出[3, 3, 3, 3],算式3+3/3-3=1
给出[3, 3, 3, 3],算式3-3+3/3=1
给出[3, 3, 3, 3],算式3*3/3/3=1
给出[3, 3, 3, 3],算式3/3+3-3=1
给出[3, 3, 3, 3],算式3/3-3+3=1
给出[3, 3, 3, 3],算式3/3*3/3=1
给出[3, 3, 3, 3],算式3/3/3*3=1
给出[3, 3, 3, 3],算式3/3+3/3=2
给出[3, 3, 3, 3],算式3*3-3-3=3
给出[3, 3, 3, 3],算式3+3-3/3=5
给出[3, 3, 3, 3],算式3-3/3+3=5
给出[3, 3, 3, 3],算式3+3+3-3=6
给出[3, 3, 3, 3],算式3+3-3+3=6
给出[3, 3, 3, 3],算式3+3*3/3=6
给出[3, 3, 3, 3],算式3+3/3*3=6
给出[3, 3, 3, 3],算式3-3+3+3=6
给出[3, 3, 3, 3],算式3*3/3+3=6
给出[3, 3, 3, 3],算式3/3*3+3=6
给出[3, 3, 3, 3],算式3+3+3/3=7
给出[3, 3, 3, 3],算式3+3/3+3=7
给出[3, 3, 3, 3],算式3/3+3+3=7
给出[3, 3, 3, 3],算式3*3-3/3=8
给出[3, 3, 3, 3],算式3+3*3-3=9
给出[3, 3, 3, 3],算式3-3+3*3=9
给出[3, 3, 3, 3],算式3*3+3-3=9
给出[3, 3, 3, 3],算式3*3-3+3=9
给出[3, 3, 3, 3],算式3*3*3/3=9
给出[3, 3, 3, 3],算式3*3/3*3=9
给出[3, 3, 3, 3],算式3/3*3*3=9

def tmp2():
op = ['+', '-', '*', '/'];
a = [3, 3, 3, 3];
for require in range(10):
for i in range(4):
for j in range(4):
for k in range(4):
s =[];
s0 = str(a[0])+op[i]+str(a[1])+op[j]+str(a[2])+op[k]+str(a[3]);
s.append(s0);

for m in range(len(s)):
try:
result = eval(s[m]);
intresult = int(result);

if intresult == require and abs(intresult - result) < 0.0001:
print('给出{0},算式{1}={2}'.format(a, s[m], intresult));
solve = 1;
except:
pass;
return;

if __name__ == '__main__':
tmp2();
</span>


如果可以用括号,就太多了。
本节到此结束,欲知后事如何,请看下回分解。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: