Как узнать, сколько чисел встречается в диапазоне в C ++? - PullRequest
0 голосов
/ 06 апреля 2020

Я написал программу для получения набора из 10000 случайных чисел со средним значением 1000 и стандартным отклонением 100. Эта часть программы работает. То, с чем я борюсь, находится в пределах этих 10000 чисел, я должен найти, сколько из них попадает в диапазон от 500 до 1500. Как вы увидите, с моим кодом я попытался сделать это некоторое время l oop, но это не удалось. Возвращает 0 чисел в диапазоне от 500 до 1500.

#include <random>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include<vector>  
using namespace std;

int main() {

int n = 10000;
int mean = 1000; 
float stdev = 100;
int maxNum = 1500;
int minNum = 500;
int count = 0;
int number;

int min = std::min(maxNum, minNum);
int max = std::max(maxNum, minNum);

default_random_engine randEng; 
randEng.seed(10);
normal_distribution<>normal(mean,stdev); 


 for (int i = 0; i < n; i++) {
        number = normal(randEng);
        count++;
    }

  if (number >= min && number <= max) {
  count++;
}

  if(count = 1) {
  std::cout << "There is " << count << " number between 500 and 1500 in the distriubtion" << std::endl;
  } else if (count > 1) {
    std::cout << "There are  " << count << " numbers between 500 and 1500 in the distriubtion" << std::endl;
  } else {
    std:cout << "There are no numbers between 500 and 1500" << std::endl;
  }

 getch();
 return 0;
}

1 Ответ

1 голос
/ 06 апреля 2020

Ваша структура неверна, и вы не смогли правильно использовать normal_distribution (вообще, вообще-то).

#include <random>
#include <iostream>
#include <algorithm>

int main() {

    int n = 10000;
    int mean = 1000;
    float stdev = 100;
    int maxNum = 1100;
    int minNum = 900;
    int count = 0;
    int number;

    int min = std::min(maxNum, minNum);
    int max = std::max(maxNum, minNum);

    std::default_random_engine randEng;
    randEng.seed(10);

    std::normal_distribution<>normal(mean, stdev);


    for (int i = 0; i < n; i++) {
        number = static_cast<int>(normal(randEng));
        if (number >= min && number <= max)
            ++count;
    }

    std::cout << "There are " << count << " numbers between " << min << " and " << max << " in the distribution\n";

    std::cin.get();
    return 0;
}

Вывод

There are 6867 numbers between 900 and 1100 in the distribution

Чем шире вы делаете это распределение, тем больше чисел попадет в него. Обратите внимание на использование объекта распределения по согласованию с генератором:

number = static_cast<int>(normal(randEng));

И также обратите внимание, что накопление count равно внутри генератора l oop, в отличие от вашего трижды. обновлен код, который имеет вне l oop и, таким образом, выполняется только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...