2016-12-22 2 views
0

Мне было предложено заполнить структуру всеми доступными комбинациями из 4 переменных (цвет, форма, nr, p).Инициализация структуры со всеми доступными комбинациями

Все эти переменные могут принимать 3 значения, поэтому я имею в общей сложности 81 комбинацию. Я буду использовать эти комбинации позже, чтобы создать карточную игру.

Комбинации для каждого:

  • цвет: г, г, б
  • формы: D, E, F
  • NR: 1,2,3
  • р: 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.. 
} 
+1

Любопытно аналогичный, но отличается от этого [недавнего вопроса] (http://stackoverflow.com/questions/41288460/how-to-initialize-structure-that-includes-unique-items-out-of-multiple -элементов/41289342). –

+1

Если вы хотите заполнить все '81' перестановки, вы должны использовать четыре * вложенных * петель. –

+0

Ничего себе, я этого не видел! Но так как я действительно новичок в программировании, я не могу использовать профсоюзы. Также это домашнее задание, поэтому нельзя использовать более продвинутые материалы. Спасибо за ваше время в любом случае! Можете ли вы указать один пример вложенных циклов, потому что кажется, что я полностью застрял? Р.Г. – ritgeo

ответ

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++; 
      } 
     } 
    } 
} 
Смежные вопросы