【问题标题】:Odd random number in range [1..99][1..99] 范围内的奇数随机数
【发布时间】:2016-10-31 18:40:09
【问题描述】:

我想用 [1..99] 范围内的奇数随机数填充一个数组。

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
using namespace std;

const int N = 100;
int a[N];

void print(){
    for (int i=0; i<N; i++) 
        cout << a[i] << " ";
}

int main(){
    srand(time(NULL));
    int number;
    for (int i=0; i<N; i++) {
        number=(rand()%100)+1;
        if (number%2!=0)
            a[i]=number;
    }
    print();
}

当我使用此代码时,我收到:

0 7 0 0 29 0 0 93 0 0 29 0 27 0 0 13 35 0 0 0 0 0 51 0 0 0 97 99 15 73 79 0 73 0 21 39 0 7 25 41 1 99 31 0 0 1 0 81 69 73 37 95 0 0 0 41 21 75 97 31 0 0 0 0 0 0 31 21 0 11 33 65 0 69 0 0 9 63 27 0 13 0 63 27 0 7 0 0 99 0 77 0 59 5 0 99 0 69 0 0

这有什么问题?为什么会有很多“0”?

【问题讨论】:

  • 调试器是解决此类问题的正确工具。 询问 Stack Overflow 之前,您应该逐行浏览您的代码。如需更多帮助,请阅读How to debug small programs (by Eric Lippert)。至少,您应该 [编辑] 您的问题,以包含一个重现您的问题的 Minimal, Complete, and Verifiable 示例,以及您在调试器中所做的观察。
  • 提示:当随机数为偶数时不要增加i

标签: c++ random


【解决方案1】:

为什么不应该有?你只填写奇数:

    if (number%2!=0)
        a[i]=number;

如果随机数是偶数,则跳过将其添加到数组中。所以...你得到的每个0 代表一个偶数。

【讨论】:

  • 我猜那甚至应该是垃圾值。但由于它是全局数组,因此值为零。另一个问题是:为什么我看到连续的数字系列?如果是偶数/奇数问题,答案将是数字、0、数字、0 等等。
  • 在这种情况下,a 是一个全局变量。
  • 好吧,这是一个愚蠢的问题。真丢人。我只需要添加“else i--”。
  • 为什么还要麻烦 if 呢?如果您想要随机奇数,则生成数字(rand(0,49)*2) + 1,或者将随机生成放在while(!odd) { make number}-type 循环中。你不应该在循环内部弄乱循环值。
【解决方案2】:

试试这样的方法,如果你真的得到一个奇数,它只会增加。

    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    using namespace std;

    const int N = 100;
    int a[N];

void print(){
    for (int i=0; i<N; i++) 
        cout << a[i] << " ";
}

    int main(){
        srand(time(NULL));
        int number;
        for (int i=0; i<N; ) {
            number=(rand()%100)+1;
            if (number%2!=0)
          {
                a[i]=number;
            i++;
          }
        }
        print();
    }

【讨论】:

  • 我说它更好/更清洁,而不是先增加然后再减少。
  • @drescherjm 我同意。
猜你喜欢
  • 2014-08-27
  • 1970-01-01
  • 2010-11-26
  • 2013-11-13
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多