<untitled> (C++)
Ревизии: current
#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;
}
Комментарии:
Нет