正剧开始:
星历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>
<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>
握手也是组合,所以是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>
这里每一枚硬币都可以选择或不选择,所以有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>