[从头学数学] 第26节 数学广角 搭配(一)

剧情提要:
[机器小伟]在[工程师阿伟]的陪同下进入练气期第三层功法的修炼,
这次要修炼的目标是[数学广角 搭配(一)]。

正剧开始:

星历2016年01月04日 10:21:46, 银河系厄尔斯星球中华帝国江南行省。

[工程师阿伟]正在和[机器小伟]一起研究第一期的数学广角,[人叫板老师]叫它搭配,[工
程师阿伟]看了一下,发现是排列组合的范畴。


这种题怎么解呢,小伟问阿伟。

这个就相当于求A(3_2) = 3 * 2=6,三个数中取两个不同数的全排列。

<span style="font-size:18px;">def tmp():
    a = [1,2,3];
    b = a;
    count = 0;
    for i in range(len(a)):
        for j in range(len(b)):
            if a[i] == b[j]:
                pass;
            else:
                print('{0}{1}'.format(a[i], b[j]), end=' ');
                count+=1;
    print('\n');
    print('一共有{0}种选择。'.format(count));
    return;</span>

看看结果吧:

<span style="font-size:18px;">>>> 
12 13 21 23 31 32 

一共有6种选择。</span>


[从头学数学] 第26节 数学广角 搭配(一)_第1张图片

<span style="font-size:18px;">function myDraw() {
	plot.init();
	setPreference();
	
	var x = 100, y=50;
	
	var color = ['red', 'blue', 'orange'];
	var type = 3;
	
	for (var i = 0; i < type; i++) {
		for (var j = 0; j < type; j++) {
			if (i != j) {
				plot.setFillStyle(color[i]);
				plot.fillRect(x, y, 100, 30);
				x += 200;
				plot.setFillStyle(color[j]);
				plot.fillRect(x, y, 100, 30);
				plot.moveTo(x-250, y+40)
					.lineTo(x+150, y+40)
					.stroke();
					
				x -= 200;
				y += 50;
			}
		}
	}
	
}</span>



这个相当于C(3_2) = 3*2/2=3

<span style="font-size:18px;">def tmp():
    a = [5, 7, 9];
    b = a;
    count = 0;
    for i in range(len(a)):
        for j in range(i, len(b)):
            if a[i] == b[j]:
                pass;
            else:
                print('{0} + {1} = {2}'.format(a[i], b[j], a[i]+b[j]));
                count+=1;
    print('\n');
    print('一共有{0}种可能。'.format(count));
    return;</span>

<span style="font-size:18px;">>>> 
5 + 7 = 12
5 + 9 = 14
7 + 9 = 16


一共有3种可能。</span>

[从头学数学] 第26节 数学广角 搭配(一)_第2张图片

握手也是组合,所以是3次。

[从头学数学] 第26节 数学广角 搭配(一)_第3张图片

<span style="font-size:18px;">def tmp():
    a = [1, 2, 5];
    b = 5;
    count = 0;
    #求x + 2 * y + 5 * z = 5的解
    i=b//a[0];
    j=b//a[1];
    k=b//a[2];
    for i_1 in range(i+1):
        for j_1 in range(j+1):
            for k_1 in range(k+1):
                if (i_1 + 2 * j_1 + 5*k_1 == b):
                    print('{0}个一角,{1}个二角,{2}个五角可以买一个拼音本。'.format(\
                        i_1, j_1, k_1));
    
    return;</span>

<span style="font-size:18px;">>>> 
0个一角,0个二角,1个五角可以买一个拼音本。
1个一角,2个二角,0个五角可以买一个拼音本。
3个一角,1个二角,0个五角可以买一个拼音本。
5个一角,0个二角,0个五角可以买一个拼音本。
>>> </span>

[从头学数学] 第26节 数学广角 搭配(一)_第4张图片

这里每一枚硬币都可以选择或不选择,所以有2*2*2=8种取法。

<span style="font-size:18px;">def tmp():
    a = [1, 5, 10];
    count = 0;
    s = '';
    total = 0;
    for nth in range(1, 9):
        i = nth;
        while (i > 0):
            if i > 4:
                s += '一毛,';
                total += 1;
                i -= 4;
            elif i > 2:
                s += '五毛,';
                total += 5;
                i -= 2;
            elif i > 1:
                s += '一块,';
                total += 10;
                i -= 1;
            else:
                i -= 1;
        
        print('{0}一共{1}块{2}毛。'.format(s, total//10, total%10));
        s = '';
        total=0;
    return;</span>

<span style="font-size:18px;">>>> 
一共0块0毛。
一块,一共1块0毛。
五毛,一共0块5毛。
五毛,一块,一共1块5毛。
一毛,一共0块1毛。
一毛,一块,一共1块1毛。
一毛,五毛,一共0块6毛。
一毛,五毛,一块,一共1块6毛。</span>

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

你可能感兴趣的:([从头学数学] 第26节 数学广角 搭配(一))