中奖彩球
某商场欲举办抽奖促销活动。有人建议在一个口袋中放12个乒乓球,其中三个为红色,
3 个为白色,6 个为黑色,要求从中任取8个,假如满足一定的颜色组合即中奖,这样
的颜色组合共有多少种?
假设任意取出的球中红色球为i个,白色球为j个,黑色球的个数根据题意应为
8-i-j个,并且红球和白球的个数取值范围是0 至3,在红球与白球个数确定的情况下
黑球个数取值应为8-i-j=6.
同样用穷举法,用二重循环求解这个问题。
代码如下:
#include<stdio.h>
main()
{
int i,j,count=0;
printf("\n RED BALL WHITE BALL BLACK BALL\n");
printf("--------------------------\n");
for(i=0;i<=3;i++) /*i作为红球个数作为外层循环变量*/
for(j=0;j<=3;j++) /*j作为白球个数作为内层循环变量*/
if((8-i-j)<=6) /*假如黑球个数满足要求,打印该组合*/
printf("%2d:\t%d\t %D\n",++count,i,j,8-i-j);
}
运行结果:
RED WHITE BLACK
1 0 2 6
2 0 3 5
3 1 1 6
4 1 2 5
5 1 3 4
6 2 0 6
7 2 1 5
8 2 2 4
-------------------------------------------------------------
魔术师的秘密
在一次晚会上,一位魔术师掏出一叠扑克牌,取出其中13张黑桃,预先洗好后,把牌面
朝下,对观众说:“我不看牌,只数一数就能知道每张牌是什么?”魔术师口中念一,
将第一张牌翻过来看正好是A;魔术师将黑桃A放到桌上,继续数手里的余牌,第二次数
1,2,将第一张牌放到这叠牌的下面,将第二张牌翻开,正好是黑桃2,也把它放在桌
子上。第三次数1,2,3,前面二张牌放到这叠牌的下面,取出第三张牌,正好是黑桃3,
这样依次将13张牌翻出,准确无误。现在的问题是,魔术师手中牌的原始顺序是怎样的?
解决这类问题的要害在于利用倒推的方法推出原来牌的顺序。
假设桌上摆着13个空盒子,编 号为1至13,将黑桃A放入第一个盒子中,从下一个空盒
子开始对空盒子计数,当数到第二个空盒子时,将黑桃2放入空盒子中,然后再从下一个
空盒子开始对空盒子计数。顺序放入3,4,5等,直到全部放入13张牌,注重在计数时要
跳过非空的盒子,只对空盒子计数,最后得到的牌在盒子中的顺序,就是魔术师手中原
来牌的顺序。
计算机就是模拟这种行之有效的倒推方法的。
代码如下:
#include<stdio.h>
int a[14];
main()
{
int i,n,j=1;
printf("The orginal order of cards is:\n");
for(i=1;i<=13;i++) /*i为空盒子的顺号*/
{ n=1;
do
{ if(j>13)j=1;
if(a[j])j++;
else
{ if(n==i)a[j]=i;
j++;
n++;
}while(n<=i);
}
for(i=1;i<=13;i++)
printf("%2d,",a[i]);
}
运行结果:
The orginal order of cards is:
1 8 2 5 10 3 12 11 9 4 7 6 13
Word教程网 | Excel教程网 | Dreamweaver教程网 | Fireworks教程网 | PPT教程网 | FLASH教程网 | PS教程网 |
HTML教程网 | DIV CSS教程网 | FLASH AS教程网 | ACCESS教程网 | SQL SERVER教程网 | C语言教程网 | JAVASCRIPT教程网 |
ASP教程网 | ASP.NET教程网 | CorelDraw教程网 |