论坛交流
首页办公自动化| 网页制作| 平面设计| 动画制作| 数据库开发| 程序设计| 全部视频教程
应用视频: Windows | Word2007 | Excel2007 | PowerPoint2007 | Dreamweaver 8 | Fireworks 8 | Flash 8 | Photoshop cs | CorelDraw 12
编程视频: C语言视频教程 | HTML | Div+Css布局 | Javascript | Access数据库 | Asp | Sql Server数据库Asp.net  | Flash AS
当前位置 > 文字教程 > C语言程序设计教程
Tag:新手,函数,指针,数据类型,对象,Turbo,入门,运算符,数组,结构,二级,,tc,游戏,试题,问答,编译,视频教程

趣味算法二例

文章类别:C语言程序设计 | 发表日期:2008-9-24 14:45:50

中奖彩球
某商场欲举办抽奖促销活动。有人建议在一个口袋中放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

上一篇:{应用}费尔马二平方素数 人气:4528
下一篇:{应用}趣味算法二例(1) 人气:7023
视频教程列表
文章教程搜索
 
C语言程序设计推荐教程
C语言程序设计热门教程
看全部视频教程
购买方式/价格
购买视频教程: 咨询客服
tel:15972130058