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

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第八层功法的修炼,
这次要修炼的目标是[四则运算]。

正剧开始:

星历2016年01月27日 14:45:58, 银河系厄尔斯星球中华帝国江南行省。
[工程师阿伟]正在和[机器小伟]一起学习四则运算。

[从头学数学] 第65节 四则运算_第1张图片

什么是加法呢?

[从头学数学] 第65节 四则运算_第2张图片

什么是减法呢?

[从头学数学] 第65节 四则运算_第3张图片

什么是乘法呢?

[从头学数学] 第65节 四则运算_第4张图片

什么是除法呢?

[从头学数学] 第65节 四则运算_第5张图片

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


还有这个游戏:

[从头学数学] 第65节 四则运算_第6张图片

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

<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组。


[从头学数学] 第65节 四则运算_第7张图片


[从头学数学] 第65节 四则运算_第8张图片

[从头学数学] 第65节 四则运算_第9张图片

[从头学数学] 第65节 四则运算_第10张图片

[从头学数学] 第65节 四则运算_第11张图片


[人叫板老师]给的这个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>


如果可以用括号,就太多了。

本节到此结束,欲知后事如何,请看下回分解。


你可能感兴趣的:([从头学数学] 第65节 四则运算)