找出一个10位数,使它的第i位(从左到右数,最左边为第0位)上的数等于i在整个数中出现的次数。比如,8000000010,它有8个0,1个8,但不它不该有1。
解答:
如果第0是9,其它的9个位就都必须是0了,所以这种情况不行。
如果第0位上是8,那么其它9个位有一个不是0,很明显,每8位必须有个1,但是这样的话,每一位得有个1,0就不是8个了。所以这种情况也不行。
如果每0位上是7,这样第7位上需要一个1,所以第一位要一个1,这样就有两个1了,所以第一位要一个2,这样第2位就必须是1了,所有数字的和超过10了。
让我们试试把6放在第0位,这样第6位需要一个1,还是一样第一位要一个1,这样就得到两个1,所以我们放个2在第一位,再在第2位放上1,这样就OK了。
所以我们要是数就是:6210001000。
找出方程(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。
这样一来,我们可以反过来构造许多这样的方程了。
我们都写过这个程序:
它会输出:
于是很自然地,要写出一个输出自己的程序,可以尝试这样写:
main() { printf("#include<stdio.h>\nmain() { printf(\"#include<stdio.h>\n main() { ...\") } ");}
它会输出:
你可以继续这样写下去,但你会发现自己已经陷入死循环了,写到printf那就得返回去加上一段。显然像上面这样是做不到的。是不是说这样的程序就不存在呢?答案是否定的,不仅写得出来,而且各种各样,五花八门的都有。
利用1,3,9克的砝码和一架天平,0到13克整数重量就都可以被称出来了,在下面的Flash中循环显示了这14种重量是怎样被称量的,注意在这个过程中,每一步都只增加或拿下一个砝码。
如果再增加一个27克的砝码,则0到40克的整数重量也都可以被称出来了,存在像上面那样的41步的一个循环吗,它称出所有41种重量,而每一步都只增加或拿下一个砝码?