C ++: списки случайных чисел: x количество случайных чисел - PullRequest
0 голосов
/ 28 мая 2018

Я пытаюсь написать программу, которая генерирует и выводит x случайных целых чисел num - пока не использует массивы или более высокий уровень C ++ (я нахожусь в циклах, таких как while, for и т. Д.)

numэто случайное число от 20 до 50, а x это случайное число от 10 до 15.

Я также хочу вычислить и показать наименьшее, наибольшее, сумму и среднее из этих чисел. Я ожидал, что мой образец тестадля вывода числа X случайных чисел (в случае моего неудачного пробного запуска это должно быть 12 случайных чисел).

Как мне убедиться, что он отображает все x целых чисел и что каждое целое число, которое он отображает в этомсписок является случайным и уникальным и не повторяет одно и то же случайное число (в моем неудачном пробном прогоне внизу это целое число равно 37, но я хочу, чтобы оно было 12 различными уникальными числами)?

/*
OUTPUT SHOULD BE:
Generating 11 random numbers (11 is a random number between 10 to 15)...
...11 Random Numbers between 20 to 50:  26, 23, 48, 32, 44, 21, 32, 20, 49, 48, 34
Largest = 49
Smallest = 21
Sum = 377
Average = 377 / 11 = 34.3
*/

#include <stdlib.h>
#include <time.h>
#include <iostream>

using namespace std;


int main(void)
{
     srand(time(NULL));
{
while (true){
        int sum = 0;
        int x = 10+rand()%6;
        int denom = x+1;
        int num = 20+rand()%31;
        int largest;
        int smallest;

        cout<<"Generating " << x << " random numbers (" << x << " is between 10 and 15)... \n";
        cout << "..." << x << " Random Numbers between 20 to 50: ";
        cout << num << endl;

        while(x >= 0)
        {
        largest = num;
        smallest = num;
        sum = sum + num;
        x--;
        }

        int average = sum / denom;

        cout << "Largest = " << largest << endl;
        cout << "Smallest = " << smallest << endl;
        cout << "Sum = " << sum << endl;
        cout << "Average = " << average << endl;

            break;
    }
    return 0;
}
}

/*
SAMPLE RUNS
==========
Generating 12 random numbers (12 is between 10 and 15)...
...12 Random Numbers between 20 to 50: 37
Largest = 37
Smallest = 37
Sum = 481
Average = 37

Process returned 0 (0x0)   execution time : 0.159 s
Press any key to continue.
*/

1 Ответ

0 голосов
/ 28 мая 2018

Используйте только одну петлю.В этом цикле должно быть сгенерировано случайное число num.

Это должно быть while (x > 0){... x--;}, например, если x == 1, то цикл запускается один раз.Вы также можете использовать цикл for, который легче понять.

denom просто сохраняет значение для x.Следовательно, это должно быть x, а не x+1

Значения для largest и smallest должны быть инициализированы до запуска цикла.Затем вы должны проверить значения.

Я использовал ноль для инициализации largest и очень большое значение RAND_MAX для инициализации smallest.

int main()
{
    srand((unsigned int)time(NULL));
    int largest = 0;
    int smallest = RAND_MAX;
    int sum = 0;
    int x = 10 + rand() % 6;
    int denom = x;
    cout << "x = " << x << endl;

    while (x > 0)
    {
        int num = 20 + rand() % 31;
        cout << "num = " << num << endl;

        if(num > largest)
            largest = num;

        if(num < smallest)
            smallest = num;

        sum += num;

        x--;
    }

    cout << "Largest = " << largest << endl;
    cout << "Smallest = " << smallest << endl;
    cout << "Sum = " << sum << endl;
    cout << "Average = " << sum / denom << endl;
    return 0;
}
...