
06.08.2009, 02:25
|
|
Участник форума
Регистрация: 18.08.2008
Сообщений: 159
С нами:
9332069
Репутация:
92
|
|
Доброе время суток.
Возникла проблема: не пишет в конец массива diceArray. Даже не знаю в чем проблема. Ошибка в процедуре initArray в последней комбинации(6,6,6,6,6,6).
Код:
#include <algorithm>
#include <fstream>
#include <cstdlib>
#include <vector>
#include <iostream>
using namespace std;
void initArray(int **array); // заполнение массива нужными числами
bool isEnd(int *array, const int size);// признак окончания заполнения
void normalize(int *array, const int size);// проверка вхождения в диапозон
void calculateSums(int **array, const int xSize, const int ySize);// подсчет общего количества сумм
int currentSum(int *array, const int xSize);// сумма строки
//----main()
int main(int argc, char *argv[])
{
const int ySize = 6 * 6 * 6 * 6 * 6 * 6; // количество вариантов
const int xSize = 6; // всего кубиков
int **diceArray = new int*[ySize];
for (int i = 0;i < ySize;++i)
diceArray[i] = new int[xSize];
initArray(diceArray);
calculateSums(diceArray, xSize, ySize);
for (int i = 0;i < ySize;++i)
delete []diceArray[i];
delete []diceArray;
diceArray = NULL;
system("pause");
return 0;
}
//----initArray()
void initArray(int **array)
{
int combination[6] = {1,1,1,1,1,1};
for (int i = 0;!isEnd(combination, 6);i++)
{
copy(combination, combination+6, array[i]);
combination[5]++;
normalize(combination, 6);
}
}
//----isEnd()
bool isEnd(int *array, const int size)
{
if (count(array, array+size, 6) == 6)
return true;
else
return false;
}
//----normalize()
void normalize(int *array, const int size)
{
for (int i = size - 1;i >= 0;i--)
{
if (array[i] == 7)
{
array[i] = 1;
array[i-1]++;
}
}
}
//----calculateSums()
void calculateSums(int **array, const int xSize, const int ySize)
{
vector<int> sums;
int current;
int counter = 0;
fstream file("out.txt", ios_base::out);
if (!file)
{
cout << "shit happened";
exit(1);
}
for (int i = 0;i < ySize;++i)
{
current = currentSum(array[i], xSize);
for (int j = 0;j < ySize;++j)
if (current == currentSum(array[j], xSize))
counter++;
sums.push_back(counter);
for (int k = 0;k < xSize;++k)
{
file << array[i][k];
}
file << ":" << counter << endl;
counter = 0;
}
vector<int>::iterator iter = max_element(sums.begin(), sums.end());
file << "\n\nHighest combination is => ";
file << *iter;
file.close();
}
int currentSum(int *array, int xSize)
{
int current = 0;
for (int i = 0;i < xSize;++i)
current += array[i];
return current;
}
|
|
|