【问题标题】:C++: Random Number lists: x number of random integersC++:随机数列表:x 个随机整数
【发布时间】:2018-11-06 14:01:51
【问题描述】:

我正在尝试编写一个生成并输出 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.
*/

【问题讨论】:

  • 您应该查看&lt;random&gt; 库。另外,我认为您如何播种随机变量存在问题。
  • 你上一个问题发生了什么?删除和重新提问并不是避免投票的方法。就像我说的那样,您正在生成一个随机数并一遍又一遍地使用它。试试explaining your code to a rubber duck

标签: c++ for-loop random while-loop integer


【解决方案1】:

只使用一个循环。应该在这个循环中生成随机数num

它应该是while (x &gt; 0){... x--;} 例如如果x == 1 那么循环运行一次。您也可以使用更容易理解的for 循环。

denom 只是保存x 的值。因此它应该是x,而不是x+1

largestsmallest 的值应该在循环开始之前初始化。然后你必须测试这些值。

我使用零来初始化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;
}

【讨论】:

    猜你喜欢
    • 2011-08-11
    • 2010-11-25
    • 2020-07-16
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-07
    相关资源
    最近更新 更多