Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2013, 16:12   #1
lawliet1391
Новичок
Джуниор
 
Регистрация: 28.03.2013
Сообщений: 2
По умолчанию подсчет числа уникальных массивов

Доброго времени суток. В общем, есть задача: дан массив из 12 элементов, каждый из которых может принимать три значения. При этом элементов с одним из трех значений должно быть поровну. то есть, буквально, 4 единицы, 4 двойки и 4 тройки. нужно посчитать количество уникльных массивов, которые можно составить таким образом. учитывается порядок, то есть {111122223333} и {111133332222} - это два уникальных массива. объясните пожалуйста алгоритм, код приводить необязательно, если это вас затруднит. код желателен на С++

Последний раз редактировалось lawliet1391; 28.03.2013 в 16:23.
lawliet1391 вне форума Ответить с цитированием
Старый 28.03.2013, 16:56   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

12!/(4!*4!*4!) = 5*7*9*10*11 = 34650 вариантов, программа не нужна. Даже калькулятор не нужен.

Если хотите именно перебрать массивы... можно просто перебирать все массивы из 1, 2 и 3 и отбирать только удовлетворяющие условию:
Код:
bool NextCombination(int* array){
  for(int i=11; i>=0; --i){ //Что-то вроде прибавления 1 в столбик
    if(array[i]!=3) {++array[i]; return true;}
    else {array[i]=1;}
  }
  return false; //Исходный массив был 33...333 и мы превратили его обратно в 11...111
}

bool IsRightCombination(const int* array){
  int count[4] = {0};
  for(int i=0; i<12; ++i) ++count[array[i]];
  return count[1]==4 && count[2]==4 && count[3]==4;
}

int CountCombinations(void){
  int array[12];
  for(int i=0; i<12; ++i) array[i]=1;
  int count = 0;
  do
    if(IsRightCombination(array)) ++count;
  while(NextCombination(array));

  return count;
}
Abstraction вне форума Ответить с цитированием
Старый 28.03.2013, 17:28   #3
lawliet1391
Новичок
Джуниор
 
Регистрация: 28.03.2013
Сообщений: 2
По умолчанию

Спасибо, теперь наконец порядок в голове
lawliet1391 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подсчет уникальных в дате strannick Microsoft Office Excel 15 03.03.2013 18:59
Подсчет времени выполнения слияния массивов PavelDD Паскаль, Turbo Pascal, PascalABC.NET 6 20.02.2013 22:14
Не работает подсчет уникальных значений AllenJ Microsoft Office Excel 16 13.10.2012 17:29
подсчет уникальных ячеек с небольшими но... mr.null Microsoft Office Excel 17 21.06.2011 09:21
Подсчет количества массивов WennY Общие вопросы Delphi 3 29.04.2011 23:33