标题:共有红黄绿蓝白黑六个球,每次依次抓取四个球,有多少种取法,并将每种取法 ...
只看楼主
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
结帖率:100%
已结贴  问题点数:10 回复次数:11 
共有红黄绿蓝白黑六个球,每次依次抓取四个球,有多少种取法,并将每种取法打印出来
#include<stdio.h>
main()
{
    enum color{red,yellow,green,blue,white,black};      //共有红黄绿蓝白黑六个球,每次依次抓取四个球,有多少种取法,并将每种取法打印出来
    enum color i,j,k,l,c;
    int n=0,loop;
    for(i=red;i<=black;i++)
        for(j=i+1;j<=black;j++)
            for(k=j+1;j<=black;k++)
                for(l=k+1;l<=black;l++)
                {
                    n++;
                    printf("%d: ",n);
                    for(loop=1;loop<=4;loop++)
                    {
                        switch(loop)
                        {
                        case 1:c=i; break;
                        case 2:c=j; break;
                        case 3:c=k; break;
                        case 4:c=l; break;
                        }
                        switch(c)
                        {
                        case red:  printf("% -10s","red"); break;
                        case yellow: printf("% -10s","yellow"); break;
                        case green: printf("% -10s","green"); break;
                        case blue: printf("% -10s","blue"); break;
                        case white: printf("% -10s","white"); break;
                        case black: printf("% -10s","black"); break;
                        }
                    }
                    printf("\n");
                }

                printf("共有%d种取法!\n",n);

}                  //觉得思路没问题,最后编译结果出不来 应该是15种,请大神指教!!!
搜索更多相关主题的帖子: color white black yellow include 
2016-09-28 14:32
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:2 
我编译都无法通过,可能运算符需要重载。
在wintc中编译成功了。
感觉你程序逻辑有问题,第二次拿球不应该是从第一次所拿颜色的下一种颜色开始,应该还是从red开始。
只不过你要排除j==i的这种情况。第三次要排除k==i和k==j两种情况。
你再改下。

[此贴子已经被作者于2016-9-28 15:05编辑过]

2016-09-28 14:51
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:4 
for(i=red;i<=black;i++)   
        for(j=i+1;j<=black;j++)            //j=red        插入一句if(i!=j)这句条件成立才执行下一句的k循环
            for(k=j+1;j<=black;k++)        //k=red   k<=black     插入一句if(k!=i&&k!=j)同上
                for(l=k+1;l<=black;l++)    //l=red        插入一句if(l!=i&&l!=j&&l!=k)只有这句成立,才执行整个l循环

如果你只是想要15种的话,只要将  for(k=j+1;j<=black;k++)改成  for(k=j+1;k<=black;k++)就行了

话说这是个死循环,你自己原来没发现吗。
测试的时候被你这句搞死

[此贴子已经被作者于2016-9-28 15:57编辑过]

2016-09-28 15:19
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
得分:4 
回复 2楼 ehszt
文件用纯C就可以运行。
也就是文件扩展名是.c而不是.cpp
2016-09-28 15:34
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
得分:0 
#include<stdio.h>
main()
{
    enum color{red,yellow,green,blue,white,black};      
    enum color i,j,k,l,c;
    int n=0,loop;
    for(i=red;i<=black;i++)
        for(j=red;j<=black;j++)
            if(i!=j)
            {
            for(k=red;j<=black;k++)
                if(k!=i&&k!=j)
                {
                for(l=red;l<=black;l++)
                    if(l!=i&&l!=j&&l!=k)
                    {
                    n++;
                    printf("%d: ",n);
                    for(loop=1;loop<=4;loop++)
                    {
                        switch(loop)
                        {
                        case 1:c=i; break;
                        case 2:c=j; break;
                        case 3:c=k; break;
                        case 4:c=l; break;
                        default: break;
                        }
                        switch(c)
                        {
                        case red:  printf("% -10s","red"); break;
                        case yellow: printf("% -10s","yellow"); break;
                        case green: printf("% -10s","green"); break;
                        case blue: printf("% -10s","blue"); break;
                        case white: printf("% -10s","white"); break;
                        case black: printf("% -10s","black"); break;
                        default: break;
                        }
                    }
                    printf("\n");
                    }
                }
            }
               

                printf("共有%d种取法!\n",n);

}
为啥运行结果是无限了 难道是我安装的Visual c++出bug了吗
2016-09-28 15:57
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
得分:0 
回复 3楼 linlulu001
刚开始的时候出现了六行结果 过了一会儿就无限循环了  刚刚按照你的那样插入了三行 但还是死循环  不好意思哈  我是新手。
2016-09-28 16:14
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
得分:0 
回复 3楼 linlulu001
谢谢  我粗心了 是这句出现了死循环
2016-09-28 16:19
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 7楼 Peter_zhao
第三个循环            for(k=red;j<=black;k++)
                 if(k!=i&&k!=j)
看到错误没有?
2016-09-28 16:44
Peter_zhao
Rank: 1
来 自:重庆
等 级:新手上路
帖 子:12
专家分:9
注 册:2016-9-8
得分:0 
回复 8楼 ehszt
看到了,已经改过来了,运行结果出现了360种取法,应该是重复了,这种思路应该还是要再看看
2016-09-28 22:32
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1728
专家分:3216
注 册:2015-12-2
得分:0 
回复 9楼 Peter_zhao
哦,你的程序应该就只错在那一处吧?你试试,我睡了。

[此贴子已经被作者于2016-9-28 23:00编辑过]

2016-09-28 22:57



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-469287-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.599066 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved