关于这个问题用指针的思路解决

计算彩球取法,口袋中有红、黄、蓝、白、黑五种颜色的球若干,每次从口袋中取出3个球,应用指针编程输出得到3种不同颜色的球的所有可能取法。


# include <iostream.h>
# include <iomanip.h>
# include <cmath>

void main()
{
 enum color_ball {red, yellow, blue, white, black};    // 起标识作用,程序中未用到;
 int i, j, k;                       // 3个循环变量;
 int counter = 0;                   // 此计数器是计算取彩球的方法数;
 for(i=0; i<5; i++)
 {
  for(j=0; j<5; j++)
  {
   if(j==i)                   // 当第二次去取出的球和第一次取出的球颜色相同就结束本轮循环;
   {
    continue;
   }
   for(k=0; k<5; k++)         // 当第三次去取出的球与第一次或第二次取出的球颜色相同就结束本轮循环;
   {
    if(k==i||k==j)
    {
     continue;
    }
    switch(i)              // 输出球的颜色;
    {
    case 0:cout << setw(15) << "red" ; break;       // 函数stew(15)是表示一个输出占15个位置;
    case 1:cout << setw(15) <<  "yellow" ; break;
    case 2:cout << setw(15) <<  "blue" ; break;
    case 3:cout << setw(15) <<  "white" ; break;
    case 4:cout << setw(15) <<  "black" ; break;
    }
    switch(j)
    {
    case 0:cout << setw(15) <<  "red" ; break;
    case 1:cout << setw(15) <<  "yellow" ; break;
    case 2:cout << setw(15) <<  "blue" ; break;
    case 3:cout << setw(15) <<  "white" ; break;
    case 4:cout << setw(15) <<  "black" ; break;
    }
    switch(k)
    {
    case 0:cout << setw(15) <<  "red" ; break;
    case 1:cout << setw(15) <<  "yellow" ; break;
    case 2:cout << setw(15) <<  "blue" ; break;
    case 3:cout << setw(15) <<  "white" ; break;
    case 4:cout << setw(15) <<  "black" ; break;
    }
    counter++;
    cout << endl;
   }
  }
 }
 cout << "Total is: " << counter << endl;
}
————————————————
版权声明:本文为CSDN博主「raobaggio」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/raobaggio/article/details/1826023

首先取第一个球,再取第二个球。判断前两个球是否相同,若相同则按顺序再取第二个球,若不相同开始取第三个球。判断第三个球和前两个球是否相同,若相同则按顺序再取第三个球,直到三个球都不相同为止。记录下三个球此时的数字,在枚举变量中找到对应颜色的球并输出。


#include <iostream>
using namespace std;

enum Color{red,yellow,blue,white,black};

int main(){
int i,j,k,l,num=0;
Color col;
for(i=red;i<=black;i++){
    for(j=red;j<=black;j++){
        if(i!=j){
            for(k=red;k<=black;k++){
                if(i!=k&&j!=k){
                    cout<<"\n";
                    num+=1;
                    cout<<num<<"\t";
                    for(l=1;l<=3;l++){
                        switch(l){
                            case 1:col=Color(i); break;
                            case 2:col=Color(j); break;
                            case 3:col=Color(k); break;
                            default:break;
                        }
                        switch(col){
                            case red:cout<<" red ";break;
                            case yellow:cout<<" yellow ";break;
                            case blue:cout<<" blue ";break;
                            case white:cout<<" white ";break;
                            case black:cout<<" black ";break;
                            default:break;
                        }
                    }
                }
            }
        }
    }
}

return 0;
}

解答如下

img

#include <stdio.h>
enum Col
{
    red=0,yellow,blue,white,black
};
char col[5][8]=
{
    "red",
    "yellow",
    "bule",
    "white",
    "black"
};
int main()
{
    int count=0;
    for(int i=red;i<=black;i++)
    {
        for(int j=red;j<=black;j++)
        {
            for(int k=red;k<=black;k++)
            {
                if(i!=j&&j!=k&&i!=k)
                {
                    printf("%d  ",++count);
                    printf("%s %s %s\n",col[i],col[j],col[k]);
                }
            }
        }
    }
    return 0;
}