[从头学数学] 第195节 计数原理

剧情提要:

[机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼。

这次要研究的是[计数原理]。

正剧开始:

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

[工程师阿伟]正在和[机器小伟]一起研究[计数原理]。

<span style="font-size:18px;">	if (1) {
        var r = 20;
        config.setSector(1,10,1,1.5);
        config.graphPaper2D(0, 0, r);
        config.axis2D(0, 0,180, 2.8);              

        //坐标轴设定
        var scaleX = 2*r, scaleY = 2*r;
        var spaceX = 1, spaceY = 1;
        var xS = -10, xE = 10;
        var yS = -10, yE = 10;
        config.axisSpacing(xS, xE, spaceX, scaleX, 'X');
        config.axisSpacing(yS, yE, spaceY, scaleY, 'Y');         

		var array2D = [[0, 0]];

		for (var i = 2; i <=10; i+=2) {
			for (var j = -3; j <=3; j+=3) {
				array2D.push([i, j]);
			}
		}

		array2D.push([12, 0]);

        //去除重复点
        var pointArray = removeDuplicatedPoint(array2D);
        //无重复的点的数量
        var points = pointArray.length;    

        //得到距离阵列
        //格式为[[点1序号,点2序号, 距离值], ...]
        var distanceArray = distanceSort(pointArray);
        //边的数量
        var edges = distanceArray.length;    

        //存放需要连通的边
        var linkedArray = [];
        //连通的边的数量
        var links = 0;    

        //每个顶点相关的边的集合
        var edgeOfVertex = [];    

        for (var i = 0; i < points; i++) {    

            //获得顶点相关的边的集合
            edgeOfVertex = [];
            for (var j = 0; j < edges; j++) {
                if (distanceArray[j][0] == i ||
                    distanceArray[j][1] == i) {
                    edgeOfVertex.push(distanceArray[j]);
                }
            }    

            //根据起始点寻找最短长度的两条边
            edgeOfVertex.sort(function(a, b) {
                return a[2] - b[2];
            });    

            var choice = 3;
            if (edgeOfVertex.length > choice) {
                edgeOfVertex = edgeOfVertex.slice(0, choice);
            }    

            linkedArray = linkedArray.concat(edgeOfVertex);
        }    

        //document.write(linkedArray.join(' , ')+'<br/>');
        linkedArray = removeDuplicatedPoint(linkedArray);
        links = linkedArray.length;    

        //document.write(linkedArray.join(' , ')+'<br/>');        

        var startPoint, endPoint, x1, y1, x2, y2;
        //比例缩放
        var scale = scaleX/spaceX;    

        for (var i = 0; i < links; i++) {
            startPoint = linkedArray[i][0];
            endPoint = linkedArray[i][1];
            x1 = pointArray[startPoint][0];
            y1 = pointArray[startPoint][1];
            x2 = pointArray[endPoint][0];
            y2 = pointArray[endPoint][1];    

            shape.vectorDraw([[x1,y1], [x2, y2]], 'red', scale);
        }    

        shape.pointDraw(pointArray, 'blue', scale, 1, 'OABCDEFGHIJKLMNPQRSTUVWXYZabcdefghijklmnpqrstuvwxyz');  

    }</span>

小伟一直以来都想算一下车牌号容量,以了解某些地方为什么要限牌。

先看车牌编码规则:

代表该车所在地的地市一级代码,规律一般是这样的,A是省会,B是该省第二大城市,C是

该省第三大城市,依此类推。 车牌号的第一个是汉字:代表该车户口所在省的简称:如四

川就是川,北京就是京,重庆就是渝,上海就是沪......,第二个是英文:代表该车所在

地的地市一级代码,规律一般是这样的,A是省会,B是该省第二大城市,C是该省第三大城

市,依此类推。然后就是后五位啦,这后五位是这样的规律,如果你是第一个在该省该地

区上的第一个车牌,从理论上讲你车牌后五位就是00001,如果你是第8965位车主,你的车

牌的后五位理论上就应该是08965,如果车牌超过了数字的容量就是第100000万位时,就从

第一位开始用字母A,后面用0001至9999,用完后第一位改成B再跟0001至9999,依此类推

,也就是说如果车牌号越大说明车越新,前面的英文字母越靠后,说明车越新,这就是一

般规律。黄色牌号代表大车,兰牌代表小车,黑牌代表外资企业或者是大使馆的车,军车的

牌号是按军队的编法编的,与地方车不一样,但是都是白底红字,警车与地方车编法基本

相同,只是最后位数字不是数字而是改成了红色的警字。

这是小伟的初步估算:

<span style="font-size:18px;">#省名+市代号+5位数字,且第一位可以用字母
#不考虑有字母保留的情况
>>> 36*9999
359964

#第二位也可以用字母
>>> 26*26*999+99999
775323

#后五位中的两个字母可以随意放,但必须连续
>>> 4*26*26*999+99999
2801295

#后五位中的两个字母可以随意放,且可以不连续
>>> 10*26*26*999+99999
6853239</span>

也就是说如果满足上述的限制条件,一个城市最多只能有不到700万台车。

如果这个城市面积1000平方公里,每平方公里就有车7000辆。

随便往哪一站,眼睛一定能看到车。

只是这个计算事实上没有什么意义,发不发牌这事。。。

<span style="font-size:18px;">>>>
[[1, 2, 3, 4], [1, 2, 4, 3], [1, 3, 2, 4], [1, 3, 4, 2], [1, 4, 2, 3], [1, 4, 3, 2], [2, 1, 3, 4], [2, 1, 4, 3], [2, 3, 1, 4], [2, 3, 4, 1], [2, 4, 1, 3], [2, 4, 3, 1], [3, 1, 2, 4], [3, 1, 4, 2], [3, 2, 1, 4], [3, 2, 4, 1], [3, 4, 1, 2], [3, 4, 2, 1], [4, 1, 2, 3], [4, 1, 3, 2], [4, 2, 1, 3], [4, 2, 3, 1], [4, 3, 1, 2], [4, 3, 2, 1]]

def perm(array):
    if (len(array)<=1):
        return [array];

    r = [];
    for i in range(len(array)):
        #抽去array[i]
        s = array[:i]+array[i+1:];
        p = perm(s);
        for x in p:
            #array[i]置顶
            r.append(array[i:i+1]+x);
    return r;

def tmp():
    print(perm([1,2,3,4]));</span>

<span style="font-size:18px;">#排列公式
def arrangement(n, m):
    if n < m:
        return arrangement(m, n);
    else:
        factorial = 1;
        for i in range(n, n-m, -1):
            factorial*=i;
        return factorial;

def tmp():
    print(arrangement(10, 4));
    print(arrangement(18, 5));
    print(arrangement(18, 18)/arrangement(13, 13));</span>

<span style="font-size:18px;">>>>
182
648

def tmp():
    print(arrangement(14,2));
    print(9*arrangement(9,2));</span>

<span style="font-size:18px;">>>>
45.0
90

#排列公式
def arrangement(n, m):
    if n < m:
        return arrangement(m, n);
    else:
        factorial = 1;
        for i in range(n, n-m, -1):
            factorial*=i;
        return factorial;

#组合公式
def combination(n, m):
    if (n < m):
        return combination(m, n);
    else:
        return arrangement(n, m)/arrangement(m,m);

def tmp():
    print(combination(10,2));
    print(arrangement(10,2));</span>

<span style="font-size:18px;">>>>
[64.0, -192.0, 240.0, -160.0, 60.0, -12.0, 1.0]

#排列公式
def arrangement(n, m):
    if n < m:
        return arrangement(m, n);
    else:
        factorial = 1;
        for i in range(n, n-m, -1):
            factorial*=i;
        return factorial;

#组合公式
def combination(n, m):
    if (n < m):
        return combination(m, n);
    else:
        return arrangement(n, m)/arrangement(m,m);

def tmp():
    a = [2, -1];
    N = 6;

    coefficient = [];

    for i in range(N+1):
        coefficient.append(a[0]**(N-i)*a[1]**i*combination(N, i));

    print(coefficient);</span>

<span style="font-size:18px;">>>>
[1.0, 14.0, 84.0, 280.0, 560.0, 672.0, 448.0, 128.0]

def tmp():
    a = [1, 2];
    N = 7;

    coefficient = [];

    for i in range(N+1):
        coefficient.append(a[0]**(N-i)*a[1]**i*combination(N, i));

    print(coefficient);

>>>
[1.0, -9.0, 36.0, -84.0, 126.0, -126.0, 84.0, -36.0, 9.0, -1.0]

def tmp():
    a = [1, -1];
    N = 9;

    coefficient = [];

    for i in range(N+1):
        coefficient.append(a[0]**(N-i)*a[1]**i*combination(N, i));

    print(coefficient);</span>

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

时间: 2024-11-09 13:05:37

[从头学数学] 第195节 计数原理的相关文章

[从头学数学] 第174节 算法初步

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了结丹中期的修炼, 这次要修炼的目标是[算法初步]. 正剧开始: 星历2016年04月12日 08:54:58, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[算法初步]. [人叫板老师]指点小伟说:"这金丹要想大成,顺利进入元婴期,就必须进行九转培炼. 这什么是九转培炼法门呢?就是要先快速的修炼[天地人正册]进入后期,不要管各种辅修 功法,然后从头游历[天地人列国],在游历中增长见闻,精炼神通,最后再修炼[术.

[从头学数学] 第223节 带着计算机去高考(十五)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月26日 10:23:46, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2014年的江苏省数学高考题]. 这一年的题和上一年一样的难,阿伟决定再交一次白卷. 好,卷子贴完,下面进入这次的主题. 这是

[从头学数学] 第215节 带着计算机去高考(七)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月20日 17:13:35, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2006年的江苏省数学高考题]. 这一年,江苏重新使用了全国卷,并且这张试卷的难度也比较高,可以说, 也是打了考生一个措手不及

[从头学数学] 第192节 导数及其应用

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第五转的修炼. 这次要研究的是[导数及其应用]. 正剧开始: 星历2016年04月23日 16:32:36, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[导数及其应用]. <span style="font-size:18px;">>>> [-3.000001001396413, -2.999998999442255] [4.999998999721811

[从头学数学] 第214节 带着计算机去高考(六)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月20日 11:40:58, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2005年的江苏省数学高考题]. 总体来说,这次的难度和上一年持平,都是很厚道的那种, 不过上一年的好多题都像闹着玩似的,这次

[从头学数学] 第220节 带着计算机去高考(十二)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月24日 17:11:11, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2011年的江苏省数学高考题]. 2011年的卷子,难度比上一年的稍小一点,但阿伟觉得也达到了5.5环的难度. 这次的特色,是

[从头学数学] 第179节 三角初等变换

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了结丹中期的修炼, 这次要修炼的目标是[三角初等变换]. 正剧开始: 星历2016年04月15日 15:32:35, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[三角初等变换]. <span style="font-size:18px;"> if (1) { var mathText = new MathText(); var s = [ '和角.差角公式', 'sin(A+B) = si

[从头学数学] 第216节 带着计算机去高考(八)

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了[九转金丹]之第八转的修炼.设想一个场景: 如果允许你带一台不连网的计算机去参加高考,你会放弃选择一个手拿计算器和草稿本吗 ?阿伟决定和小伟来尝试一下用计算机算高考题会是怎样的感觉. 正剧开始: 星历2016年05月21日 11:31:19, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起做着2007年的江苏省数学高考题]. 这一年的卷子又回到了比较低的难度,感觉这就是正弦曲线的节奏. <span style="

[从头学数学] 第162节 锐角三角函数

剧情提要: [机器小伟]在[工程师阿伟]的陪同下进入了筑基后期的修炼, 这次要修炼的目标是[锐角三角函数]. 正剧开始: 星历2016年04月05日 10:20:54, 银河系厄尔斯星球中华帝国江南行省. [工程师阿伟]正在和[机器小伟]一起研究[锐角三角函数]. 这座塔真的很壮观,不知现在还是否允许游客上去观光. <span style="font-size:18px;"> if (1) { config.setSector(1,1,1,1); var r = 20; c