Apr 18

井字游戏,英文名是tic-tac-toe,最原始是游戏是在一个3*3的方格棋盘中,每人轮流下看谁先连成横竖或斜着一条线就算赢了,我们把种线叫做tic-tac-toe线,可以在这里http://allaboutfrogs.org/funstuff/java/tictactoe/玩一下这个游戏。现在我们问的是如果是在一个n*n*n的立方体中玩这个游戏,有多少种tic-tac-toe线?比如对于3*3*3的方块,横竖的情况有27种,在面上斜对角的情况有18种,体对角的情况有4种,所以一共有27+18+4=49种。

解答_证明:

其实直接用上面这种分情况的方法就可以求出来了。先看横竖的情况,考虑相对x轴平行的有n*n种,y,z轴也一样,所以有3*n*n种;再看面对角的情况,考虑平行于xoy面的情况,有2*n种情况,yoz,zox面也一样,所以一共有3*2*n种情况;体对角的情况只有4种;这样总共有 3*n^2+6*n+4种情况了。

其实这是一道很简单的题,如果用上面的常规做法显然没什么意思,下面看一个另类的做法:

考虑边长为n+2的立方体,它中间就是边长为n的立方体了,我们把除了里面的n*n*n立方体外的部分叫做外壳。这样当把内部立方体的 tic-tac-toe线扩展之后,会外壳交于一对方块;反过来,外壳上的每和方格和它正对面的方格形成的tic-tac-toe线将穿过内部n*n*n 立方体。所以我们就知道了,我们要求的线的数目就等于外壳上方块的数目,也就是((n+2)^3-n^3)/2=3*n^2+6*n+4

Apr 10

      写了组合生成函数 ,本来打算再写排列生成函数的,但是看到了一个讲生成函数的讲义,觉得非常的好,所以我也就不写了,不过文章太长了,就用图片分享给大家吧。文章是用繁体字写的,不过还好,不是很难认。

Apr 8

找出方程(6x - 1)(3x - 1)(2x - 1) = 4 的实根。

 

解答:                                         令y=6x,则方程变成:

           

(y - 1)(y/2 - 1)(y/3 - 1) = 4

                                                                              或者:

(y - 1)(y - 2)(y - 3) = 2*3*4

    很明显上面方程的唯一实根就是y=5,所以x=y/6=5/6。

    这样一来,我们可以反过来构造许多这样的方程了。

 

 

 

Apr 8

在一个大圆中,四个半径为大圆一半的小圆过圆心分布在坐标轴的x,y轴正负半轴上,如图:
 
证明小圆两两相交的面积之和(红色区域)和小圆没有覆盖的面积(绿色区域)相等?
 
先看一个外国人怎么证明的:
证明:先考虑上面图形的1/8,并给各个面积标上a,b,c,d等,如下图:
 
设R是大圆的半径,我们可以得到:
a+b+c+d=PI*R*R/8;
b+c+d+e=PI*R*R/8;
这样就得到a=e=d;8a=8d,这样就证明了。

Mar 28

设n为整数,如果式子:表示一个整数,证明:n为两个连续整数的乘积。

证明:设整数T为式子表示的整数,那么t^2=n+t,即t^2-t-n=0,t=[1+-Sqrt(1-4n)]/2,那么1-4n=r^2,

           可以看出r为奇数,所以n=(r^2-1)/4=[(r-1)/2][(r+1)/2],这样就证明了n为两个连续整数的乘积。

Mar 28

在提出「生成函数」的数学定义之前,我们先考虑几个简单的排列组合问题。(不知道怎么回事,发表这篇文章首页显示会有问题,搞了好久没找到问题,于是清空重新输入了一遍,并把所有公式都去掉了,用文本代替,首页显示终于没问题了,可能公式就得你费力看了)。

考虑恒等式:(1+ax)(1+bx)(1+cx)=1+(a+b+c)x+(ab+bc+ac)x^2+abcx^3

如将a,b,c 看作代表三个对象,它的右边是一多项式,其系数恰代表了将 a,b,c 作组合的各种可能。常数项1表示在三对象中一个都不取;x 的系数a+b+c 表示在a,b,c 中取一个的各种组合,即或取a,或取b,或取 cx^2 的系数ab+bc+ac 表取二个的各种组合;x^3之系数表示了三个皆取的唯一方法。在这里可能产生各种情形是用+号连接,同时发生之事件则用乘法(即符号并列)表示。 

又设有5个球 a,a,a,b,c,其中三个球a 完全一样,则恒等式: 

 (1+ax+a^2x^2+a^3x^3)(1+bx)(1+cx)= 1+(a+b+c) x+(a^2+a b+a c+b c) x^2+(a^3+a^2 b+a^2c+

a b c) x^3+(a^3 b+a^3 c+a^2 b c) x^4+a^3 b c x^5

其中 x^r的系数表示了选取r个的各种可能组合(1<=r<=5 ) 

在排列组合问题中,加法原则与乘法原则是大家熟知的两个法则。加法原则是讲如一事件可能发生情况有 m 种,另一种事件可能发生情况有 n 种,则这两种事件其一发生情况有m+n 种。乘法原则是讲如一事件可能发生情况有m种,另一事件可能发生情况有n种,则这两事件同时发生情况有mn种。我们在上面两例用到的是一种符号运算,它遵从这两法则。在第二个例子中,因子(1+ax+a^2x^2+a^3x^3)表示了或不取a,或取一个a,或取2a,或取三个a 的各种情况;而在第一个例子中,(1+ax)(1+bx)表示了如果 a , b 被允许同时选取时可能产生之各种情况。

Mar 24

      最近突然冒出一个想法:怎样写一个程序,它可以输出自己的源代码?

      我们都写过这个程序:

#include<stdio.h>
main() { printf("Hello, world");}

      它会输出:

Hello, world

      于是很自然地,要写出一个输出自己的程序,可以尝试这样写:

#include<stdio.h>
main() { printf("#include<stdio.h>\nmain() { printf(\"#include<stdio.h>\n main() { ...\") } ");}

      它会输出:

#include<stdio.h>
main() { printf("#include<stdio.h>
main() { ..."
) }

      你可以继续这样写下去,但你会发现自己已经陷入死循环了,写到printf那就得返回去加上一段。显然像上面这样是做不到的。是不是说这样的程序就不存在呢?答案是否定的,不仅写得出来,而且各种各样,五花八门的都有。