第一道是小鱼同学给我出的,小学数学题。题目我等效转换了一下,先说题目。有长为 5,宽为 4 的瓷砖若干,请问最少要多少块才能铺成一个正方形,使得砖与砖之间没有空隙。有个解答是某家教 MM 给出的,使瓷砖按同一个方向铺,使得正方形的某一边为 5 个宽度为 4 的瓷砖,另一边为 4 个长度为 5 的瓷砖,只需要 20 块瓷砖便可。大概是像(图一)这样子的:(画得不像请原谅)
(图一)(图二)
这样显然是一种解答,但是是不是最少却有待商榷。在所有瓷砖都向同一方向排列的时候它需要最小的砖书,可是如果像(图二)那样瓷砖有两种可能的方向的话,有没有可能使得摆成正方形而所用砖数又少于 20 呢?这是有可能的,这就是问题的所在了。
下面排除这种(图二)的可能性,用反证法。假设存在有这样的情形。不妨设构成的正方形某边的长度构成是 5*x1+4*y1,而另外一边是 5*x2+4*y2。则有等式成立:5*x1+4*y1=5*x2+4*y2。变换一下,得到:5*(x1-x2)=4*(y2-y1)。
要使等号成立,显然要两边都相等(注释:废话!)。而这些未知数都是整数,要么左右两边都等于 0,要么左右两边都是 20 的倍数(貌似 0 也是 20 的倍数)。如果是 20 的倍数的话那么至少而言,x1-x2=4 以及 y2-y1=5。根据这个式子,需要的砖数显然已经超过 20 了,忽略之。那么还有一个可能,x1=x2=x,y1=y2=y。则有正方形的面积 S=(5x+4y)^2,根据题目要求,砖与砖之间没有空隙,所以有 S 必然是长方形面积 20 的整数倍,(5x+4y)^2=20*n。将上式两边开根号得 5x+4y=sqrt(20*n),n 至少是 20 才能使得开根号后等式的右边为整数。也就是文章一开始时候说到的那种解答。至此问题解决。
第二个问题是算法导论上讲的,我翻译一下,大概是这个意思:现在有一个函数叫做 BIASED-RANDOM,它的作用是以 p 的概率输出 1,以 1-p 的概率输出 0(0<p<1)。但是你不知道 p 的值是多少。请设计一个算法,使用上面所说的 BIASED-RANDOM,使得你的算法达到这样一个目的:以 1/2 的概率输出 1,以 1/2 的概率输出 0。并计算你的算法运行所需时间的期望。
我的想法是这样的,利用 BR 函数先产生 1 再产生 0 的概率是 p(1-p),此时输出 1. 而先产生 0 再产生 1 个概率是(1-p)p。此时输出 0。显然等概率。而还有 p*p 和(1-p)*(1-p) 情况下是不产生任何数字的,便可算出运行时间的期望值了。哪位有空的话顺便算一下期望:-D 大概的 C++代码是这样的:
int i=BR(),j=BR();
if(i==1&&j==0)cout<<1;
else if(i==0&&j==1)cout<<0;
return;
打完收工~~
实验报告没写,我起初也觉得运算器很简单,写完之后自己找数据测试发现不是这么回事。
数据测试的确麻烦,要考虑到多种可能情况。写写实验报告吧,其实别人看也不会看程序的,一般只想看实验报告,嘿嘿,帮别人调试程序实在是份麻烦的活儿~~
我最近也在编程,把你们那个运算器实验做完了。
实验报告写了?发来我看看。我最近没有在写程序,我压根就不太记得了,昨晚有同学问我某个数组作为形参的问题,我反映了大半天不知什么回事。
而我的运算器呢,07 年某虫虫飞同学挑出了 N 多 bug,08 年又被师弟挑出一些 bug。。
根据这个式子,需要的砖数显然已经超过 20 了,忽略之。
这里你是不是应该解释一下?
x1-x2=4 以及 y2-y1=5
然后因为 x2 及 y1 为非负整数,因而 x1 大于或等于 4,y2 大于或等于 5
你怎么就能推出砖数超过 20 了?
要知道你是不规则摆放,砖数不是靠简单的相乘就能计算出来的。
还有
你给出的图一明显是两边都是 20 的倍数的情况(x1=0,y2=0 或 x2=0,y1=0),你怎么就把人这样不知所以然的忽略了?
是我太笨还是你太聪明?
额,好像不是太显然,我再延伸一步,x1>=4且y2>=5故正方形的边长l>=20,所以面积S>=400,因此砖数肯定至少为 20。。。文中说得不太准确,嗯嗯。我比较愚钝唉唉
另外下面的程序也是有瑕疵的,还需要一个 do 循环套在外面,否则有可能不输出任何值。
至少为 20 不能说 “需要的砖数显然已经超过 20” 吧,为 20 也是可能的。你不能这样就把人家一种可能性忽略吧?
而且我觉得你的图一就是刚好为 20 的情况。
再者,你那 do 循环打算用什么做循环条件?已经有输出怎么用语句描述…
我觉得是再在 cout 语句后加 break 吧,不过这样的风格貌似又是不提倡的。
ps:你的图的比例画得实在太不像了….
我觉得没有循环条件,要不这样,在 cout 语句后加 return 吧,这种风格怎么会不提倡呢。
我爆喜欢 force-return。
PS: 文曲星上没有 Photoshop,你将就一下吧,windows 自带画图弄出来的。