【问题标题】:in c,how to generate random numbers without any duplicate [duplicate]在c中,如何生成没有任何重复的随机数[重复]
【发布时间】:2021-05-04 07:31:40
【问题描述】:

我正在尝试生成没有任何重复的随机数,例如从 1 到 5 我希望它是 2 3 1 5 4 而不是 2 2 2 1 5。我已经尝试过了,但是出了点问题,代码没有不能正常工作。

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

int random(int minN, int maxN){
    return minN + rand() % (maxN + 1 - minN);
}
 
int main(){
    int max,min;
    printf("nhap max ");
    scanf("%d", &max);

    printf("nhap min ");
    scanf("%d", &min);
    srand((int)time(0));
    for (int i = 0; i < max; i++)
    {
        int arr[100];
        arr[i] = random(min,max);
        if(i!=0){
            for(int j=i-1; j>=0;j-1){
                if (arr[i]==arr[j])
                    continue;
            }
        }
        printf("%d ",arr[i]);
    }
}

【问题讨论】:

  • 这对我来说听起来并不随意。您可能希望从 1 到 5 的数字以随机顺序排列,这是完全不同的。
  • 欢迎来到 SO。随机数的本质是它们可以重复。相反,您想要的是一组随机顺序的给定数字。您可以将所有数字放入一个数组并创建随机索引以从该数组中选择一个数字并随后删除。
  • 您的编译器是否会发出一些关于“没有任何副作用的表达式”的警告?为您的循环:; j-1}。在调试器中运行程序应该会在几秒钟内显示无限循环。
  • 除了之前的cmets,“而且代码没有正常工作。”不是一个非常有用的语句。什么不正确地发生或不发生?请阅读How To ask 并提供示例输入、预期输出和实际输出。
  • 你想改组数组{ 1, 2, 3, 4, 5 }。试试Fisher-Yates shuffle

标签: c visual-studio


【解决方案1】:

同时生成随机数而不是random(min,max);你可以在下面使用:

int random_int(int min, int max) { return min + rand() % (max+1 - min);}

【讨论】:

  • 这如何解决问题的“无重复”部分?这与问题中的代码有何不同?那只是使用了稍微不同的名字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 2012-12-17
  • 2021-06-01
相关资源
最近更新 更多