我被要求用4个变量(颜色,形状,nr,p)的所有可用组合填充结构。
所有这些变量都可以取3个值,所以我总共有81个组合。 我稍后会使用这些组合来创建纸牌游戏。
每种组合:
我被告知有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..
}
答案 0 :(得分:1)
您需要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++;
}
}
}
}