Показать сообщение отдельно

  #3423  
Старый 06.08.2009, 02:25
4p3
Участник форума
Регистрация: 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;
}
 
Ответить с цитированием