1、趣味C语言题韩信点兵在中国数学史上,广泛流传着一个“韩信点兵”的故事:韩信是汉高祖刘邦手下的大将,他英勇善战,智谋超群,为汉朝建立了卓越的功劳。据说韩信的数学水平也非常高超,他在点兵的时候, 为了知道有多少兵,同时又能保住军事机密,便让士兵排队报数:按从1至5报数,记下最末一个士兵报的数为1;再按从1至6报数,记下最末一个士兵报的数为5;再按从1至7报数,记下最末一个士兵报的数为4;最后按从1至11报数,最末一个士兵报的数为10;你知道韩信至少有多少兵?() z谁结婚呢?魔术师的秘密在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面朝下,对观众说:“我不看牌,只数一
2、数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手中牌的原始顺序是怎样的?约瑟夫问题这是17世纪的法国数学家加斯帕在数目的游戏问题中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人 就将
3、他扔入大海,如此循环进行直到仅余15个人为止.问怎样排法,才能使每次投入大海的都是非教徒.求车速一辆以固定速度行驶的汽车,司机在上午10点看到里程表上的读数是一个对称数(即这个数从左向右读和从右向左读是完全一样的),为95859.两小时后里程表上出现了第二个新的对称数.问该车的速度是多少 新的对称数是多少?常胜将军现有21根火柴,两人轮流取,每人每次可以取走1至4根,不可多取,也不能不取,谁取最后一根火柴谁输.请编写一个程序进行人机对弈,要求人先取,计算机后取;计算机一方为常胜将军. 十进制转换成N进制(N=2 8 16 )定义一个方法Trans(int num, int regx) 实现将一
4、个输入十进制数num转换成 regx 进制Eg: Trans(100, 16) 表示将 100 转成 16进制数 输出求100到1000之间有多少个其数字之和为5的整数.(答案:104,113,122,131,140,203,212,221,230,302,311,320,401,410,500)打鱼还是晒网scanf(“%d%d%d”,&year ,&month,&day);中国有句俗语叫三天打鱼两天晒网.某人从1990年1月1日起开始三天打鱼两天晒网,问这个人在以后的某一天中是打鱼还是晒网.*思考题:请打印出任意年份的日历*运行结果Enter year/month/day:1991 10
5、25He was fishing at day.Enter year/month/day:1992 10 25He was sleeping at day.Enter year/month/day:1993 10 25He was sleeping at day.求具有abcd=(ab+cd)2性质的四位数3025这个数具有一种独特的性质:将它平分为二段,即30和25,使之相加后求平方,即(30+25)2,恰好等于3025本身.请求出具有这样性质的全部四位数.*运行结果There are following numbers with 4 digits satisfied condition:2
6、025 3025 9801填数字游戏已知下面的算式: ABCD EDCBA 计算ABCDE取什么值? Sum 谁在说谎张三说李四在说谎,李四说王五在说谎,王五说张三和李四都在说谎.现在问:这三人中到底谁说的是真话,谁说的是假话 *运行结果Zhangsan told a lie (张三说假话)Lisi told a truch. (李四说真话)Wangwu told a lie. (王五说假话)谁是窃贼公安人员审问四名窃贼嫌疑犯.已知,这四人当中仅有一名是窃贼,还知道这四人中每人要么是诚实的,要么总是说谎的.在回答公安人员的问题中:甲说:乙没有偷,是丁偷的.乙说:我没有偷,是丙偷的.丙说:甲没有
7、偷,是乙偷的.丁说:我没有偷.请根据这四人的答话判断谁是盗窃者.*运行结果The thief is B. (乙为窃贼.)求数字求出所有可能的以下形式的算式,每个算式中有九个数位,正好用尽1到9这九个数字。 1)+=(共有168种可能的组合) 2)=(共有2种可能的组合) 3)=(共有7种可能的组合) 4)=(共有13种可能的组合) 5)=(共有28种可能的组合) 6)=(共有7种可能的组合) 7)=(共有11种可能的组合)爱因斯坦的数学题爱因斯坦出了一道这样的数学题:有一条长阶梯,若每步跨2阶,则最最后剩一阶,若每步跨3 阶,则最后剩2阶,若每步跨5阶,则最后剩4阶,若每步跨6阶则最后剩5阶.
8、只有每次跨7阶,最后才正好一阶不剩.请问这条阶梯共有多少阶?119角谷猜想猜想的内容是:任给一个自然数,若为偶数除以2,若为奇数则乘3加1,得到一个新的自然数后按照上面的法则继续演算,若干次后得到的结果必然为1.请编程验证.黑洞数495与6174黑洞数也称为陷阱数,又称“Kaprekar问题”,是一类具有奇特转换特性的数。任何一个数字不全相同的三位数,经有限次“重排求差”操作,总会得到495.最后所得的495即为三位黑洞数。所谓“重排求差”操作即组成该数的数字重排后的最大数减去重排后的最小数。(6174为四位黑洞数)例如,对三位数207:第1次重排求差得:720027693;第2次重排求差得:
9、963369594;第3次重排求差得:954459495;以后会停留在495这一黑洞数。如果三位数的3个数字全同,一次转换后即为0.因而,可把0与495一并作为判断条件。试求出任意输入三位数重排求差的过程。梅森尼数形如2n1的素数称为梅森尼数(Mersenne Prime)。例如2213、2317都是梅森尼数。1722年,双目失明的瑞士数学大师欧拉证明了231147是一个素数,堪称当时世界上“以知最大素数”的一个记录。试求出指数n 3升出来拉丁方阵构造 NXN 阶的拉丁方阵(2=N=9),使方阵中的每一行和每一列中数字1到N只出现一次.如N=4时:1 2 3 42 3 4 13 4 1 24
10、1 2 3作业:1黑与白有A,B,C,D,E五个人,每人额头上都贴了一张或黑或白的纸条。五人对坐,每人都可以看到其它人额头上纸条的颜色,但不知道自己额头上纸条的颜色,五人相互观察后-A说:“我看见三个人额头上贴白纸条,一人贴黑纸条”B说:“我看见四人额头上都贴黑纸条。“C说:“我看见三个人额头上贴黑纸条,一人贴白纸条。”D说:“我看见四人头上都贴白纸条。”E什么也没有说。已经知道额头贴黑纸条的人说的是假话,额头贴白纸条的人说的是真话。问究竟谁的额头贴白纸条,谁的额头贴黑纸条?2 要求输入一个数字N,然后打印一个数字绕的圈。 例如:N=3,然后输出: 1 2 3 8 9 4 7 6 5 N=4
11、1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 依次例推。 要求用数组和循环实现。黑与白有A,B,C,D,E五个人,每人额头上都贴了一张或黑或白的纸条。五人对坐,每人都可以看到其它人额头上纸条的颜色,但不知道自己额头上纸条的颜色,五人相互观察后-A说:“我看见三个人额头上贴白纸条,一人贴黑纸条”B说:“我看见四人额头上都贴黑纸条。“C说:“我看见三个人额头上贴黑纸条,一人贴白纸条。”D说:“我看见四人头上都贴白纸条。”E什么也没有说。已经知道额头贴黑纸条的人说的是假话,额头贴白纸条的人说的是真话。问究竟谁的额头贴白纸条,谁的额头贴黑纸条?我们用a,b,c,d,e表
12、示每个人额头上所贴纸条的颜色,0代表黑色,1代表白色。由于暂时无法判定究竟谁说的是真话,因此每个人的话都有对错二种可能。以A说的话为例:假设A贴的是白纸条,寻么A说实话,有:a&b+c+d+e=3假如A贴的是黑纸条,那么A说假话,有:!a&b+c+d+e!=3因此根据A的回答,可以得到如下结论:a&b+c+d+e=3|!a&b+c+d+e!=3同样由b,c,d的回答,有如下结论:b&a+c+d+e=0|!b&a+c+d+e!=0c&a+b+d+e=1|!c&a+b+d+e!=1d&a+b+c+e=4|!d&a+b+c+e!=4与上例一样,让计算机穷举所有可能的情形,代入上述表达式进行推理运算,
13、假如满足上述表达式为真,说明找到了正确答案。代码如下:main()inta,b,c,d,e;for(a=0;a=1;a+)for(b=0;b=1;b+)for(c=0;c=1;c+)for(d=0;d=1;d+)if(a&b+c+d+e=3|!a&b+c+d+e!=3)&(b&a+c+d+e=0|!b&a+c+d+e!=0)&(c&a+b+d+e=1|!c&a+b+d+e!=1)&(d&a+b+c+e=4|!d&a+b+c+e!=4)printf(Aispasted%s.n,a?white:black);printf(Bispasted%s.n,b?white:black);printf(Ci
14、spasted%s.n,c?white:black);printf(Dispasted%s.n,d?white:black);printf(Eispasted%s.n,e?white:black);魔术师的秘密在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3
15、,这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手中牌的原始顺序是怎样的?解决这类问题的要害在于利用倒推的方法推出原来牌的顺序。假设桌上摆着13个空盒子,编号为1至13,将黑桃A放入第一个盒子中,从下一个空盒子开始对空盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再从下一个空盒子开始对空盒子计数。顺序放入3,4,5等,直到全部放入13张牌,注重在计数时要跳过非空的盒子,只对空盒子计数,最后得到的牌在盒子中的顺序,就是魔术师手中原来牌的顺序。计算机就是模拟这种行之有效的倒推方法的。代码如下:#includeinta14;main()inti,n,j=1;printf(Theo
16、rginalorderofcardsis:n);for(i=1;i13)j=1;if(aj)j+;elseif(n=i)aj=i;j+;n+;while(n=i);for(i=1;ib-c-a并且必须符合如下规则:1.b(8斤桶)倒空后才能从a(12斤桶)中取油。2c(5斤桶)盛满后才能向a(12斤捅)中倒油。我们设从a中往b倒油x次,从c往a倒油y次,那么最后a中剩下的油应该为12-8x+6y斤,按照题意,我们得到如下方程,12-8x+6y=6:我们为了得到这个方程的解,应按照上述的倒油规则不断的倒下去,直到a中或b中油的重量为6斤为止,另外也可以改变倒油的规则,看能否找到最好的倒油步聚。代
17、码:#includeinti;main()inta,y,z;printf(InputFulla,Emptyb,c,Geti:);/*读入3个容器的容量和最后需要的数量*/scanf(%d%d%d,&a,&y,&z,&i);getti(a,y,z);getti(inta,inty,intz)intb=0,c=0;/*b,c为二个容器的实际重量*/printf(a%db%dc%dn%4d%4d%4dn,a,y,z,a,b,c);while(a!=i|b!=i)/*假如满足要求退出循环*/if(!b)/*假如b为空,从a往b倒油*/a-=y;b=y;elseif(c=z)a+=z;c=0/*假如c已
18、满,从c往a倒油*/elseif(bz-c)b-=(z-c);c=z;/*假如b的重量大于c的剩余重量,倒满c*/elsec+=b;b=0;/*否则将b中的油全部倒入c*/printf(%4d%4d%4dn,a,b,c);要求输入一个数字N,然后打印一个数字绕的圈。 例如:N=3,然后输出: 1 2 3 8 9 4 7 6 5 N=4 1 2 3 4 12 13 14 5 11 16 15 6 10 9 8 7 依次例推。 要求用数组和循环实现。分析:螺旋巨阵问题 楼主可以这样去考虑 找出这个数组的规律 思路: 第一:输出第一行的所有列 第二:输出每一行的最后一列 第三:输出每一列的最后一行
19、第四:输出第一列的所有行 四步做完之后再去考虑它的内向循环 依次减一就可以了 总的循环次数是行或列的一半因为当 N 是奇数的时候才需要填充 (N/2)+1 次,N是偶数的时候只要填充 (N/2)次, i是从0开始的,所以不需要等于i =N/2。 int i,j,n=1,aNN; / 每次顺时针填充一个“口”字型。假设分为X轴Y轴坐标 for (i=0; i N/2; i+) for (j=i; j N-i; j+) / 往右填充,X保持,Y+ aij = n+; for (j=i+1; j i; j-) / 往左填充,X保持,Y- aN-i-1j = n+; for (j=N-i-1; j i; j-) / 往上填充,Y保持,X- aji = n+; for (i=0; i N; i+) printf( nn ); for(j
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1