<untitled> (C++)

Ревизии: current

text/plain
text/html
source
Old rev.:
#include <stdio.h>
#include <stdlib.h>
#include <intrin.h>
#include <vector>
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

#define NUM_OF_CANDIDATES 10
#define NUM_OF_ATTEMPTS 10000

void main(void)
{
    //Инициализация

    srand(__rdtsc());

    ofstream fileOut;
    fileOut.open("results.txt");
    fileOut.precision(2);

    cout << "Doing some magic... ";

    for(int k = 0; k < NUM_OF_CANDIDATES - 2; ++k)
    {
        fileOut << "k = " << k + 1 << endl;
        int successNum = 0; //Число раз, когда выбранный кандидат оказался лучшим

        //Повторение эксперимента
        for(int attempt = 0; attempt < NUM_OF_ATTEMPTS; ++attempt)
        {
            vector<double> candidScores;
            vector<double>::iterator chosenCandidate;
            vector<double>::iterator maxFromK;

            //Заполнение массива случайными величинами от 0 до 100
            for(int i = 0; i < NUM_OF_CANDIDATES; ++i)
            {
                candidScores.push_back((double)rand()/(double)(RAND_MAX/100));
                //      fileOut << *(--candidScores.end()) << endl;
            }

            //Определение лучшего из первых k кандидатов
            maxFromK = max_element(candidScores.begin(),candidScores.begin()+k);
            //  fileOut << "Max = " << *maxFromK << endl;

            //Выбор из оставшихся (n-k) кандидатов
            chosenCandidate = candidScores.end() - 1; //Если никого лучше не нашлось
            for(vector<double>::iterator it = candidScores.begin() + k + 1; it != candidScores.end(); ++it)
            {
                if (*it > *maxFromK)
                {
                    chosenCandidate = it;
                    break;
                }
            }

            //Является ли выбранный кандидат лучшим?
            if (chosenCandidate == max_element(candidScores.begin(),candidScores.end() - 1))
            {
                successNum++;
            }
        }

        //Вероятность выбора наилучшего кандидата
        double pOfSuccess = (double)successNum / NUM_OF_ATTEMPTS;
        fileOut << "Probability of success = " << pOfSuccess << endl;
    }

    fileOut.close();
    cout << "Done! See results.txt" << endl;
}

Комментарии:

Нет