用所有可用组合初始化结构

里吉欧

我被要求用4个变量(颜色,形状,nr,p)的所有可用组合来填充结构。

所有这些变量可以取3个值,因此我总共有81个组合。稍后,我将使用这些组合来创建纸牌游戏。

每个的组合:

  • 颜色:r,g,b
  • 形状:d,e,f
  • 编号:1、2、3
  • p:j,k,l

有人告诉我4个循环足以完成此操作,但无法找出应如何形成。我在想的是在前27个位置中填入颜色值,然后在其他27个位置中填入颜色,然后在其余位置中填入其他颜色。然后开始填充形状,然后再填入nr等。但是那样,我有太多的循环,根据说明,不仅有4个循环就足够了。

这是更大的练习的一部分,但是如果我不填写结构,就无法继续学习重要内容!

我想念什么?

#include <stdio.h>
#include <stdlib.h>
int i;
typedef struct {
    unsigned char colour;
    unsigned char shape;
    unsigned char nr;
    unsigned char p;
} CARDS;


int main()
{
    CARDS cards[81];

    for (i=0;i<27;i++)
        cards[i].colour='r';
    for(i=27;i<54;i++)
        cards[i].colour='g';
    for (i=54;i<81;i++)
        cards[i].colour='b';
    for (i=0;i<6)
        cards[i].shape = 'd';
    for (i=0;i<12)
        cards[i].shape = 'e';
    // a lot more loops..
}
dbush

您需要4个嵌套循环才能进行每种可能的组合(3 * 3 * 3 * 3 == 81)。对于每个字段,您还需要4个固定的可能值固定数组,以进行迭代。

char color_list[] = {'r','g','b'};
char shape_list[] = {'d','e','f'};
char nr_list[] = {'1','2','3'};
char p_list[] = {'j','k','l'};

CARDS cards[81];

int current = 0;
int i,j,k,l;
for (i=0; i<3; i++) {
    for (j=0; j<3; j++) {
        for (k=0; k<3; k++) {
            for (l=0; l<3; l++) {
                cards[current].colour = color_list[i];
                cards[current].shape = shape_list[j];
                cards[current].nr = nr_list[k];
                cards[current].p = p_list[l];
                current++;
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章