gpt4 book ai didi

c - 如何生成不同整数的数组

转载 作者:行者123 更新时间:2023-11-30 19:27:23 24 4
gpt4 key购买 nike

我一直在尝试创建一个完全不同的随机整数数组,其中 25 个在 1-75 之间。一直陷入无限循环。非常感谢帮助!

我尝试查找解决方案,但我要么不理解它们,要么只是找不到任何适合我水平的东西。顺便说一句,我已经确保我使用了 srand(time(NULL));

for (i = 0; i < 25; i++)
{
while (k != 1)
{
arr[i] = rand() % 75 + 1;
for (j = 0; j < 25; j++)
{
if (arr[i] == arr[j])
{
k++;
}
}
}
k = 0;
}

完整代码:

/*********************************
* Class: MAGSHIMIM C2 *
* Week: *
* Name: *
* Credits: *
**********************************/

#include <stdio.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
int main(void)
{
srand(time(NULL));
int i = 0;
int j = 0;
int k = 0;
int arr[25] = { 0 };
for (i = 0; i < 25; i++)
{
while (k != 1)
{
arr[i] = rand() % 75 + 1;
for (j = 0; j < 25; j++)
{
if (arr[i] == arr[j])
{
k++;
}
}
}
k = 0;
}
for (i = 0; i < 25; i++)
{
printf("%d", arr[i]);
}
getchar();
return 0;
}

expecetd:一个不错的不同数组,但我有一个无限循环。

最佳答案

一种方法是在所需范围内制作一个池或一袋数字,然后从中进行选择。这并不比反复检查号码是否已被选中困难多少,而且效率更高。您修改后的程序现在是:

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

#define ARRLEN 25 // how many to pick
#define NUMBERS 75 // range of available numbers
#if NUMBERS < ARRLEN // precaution
#error Impossible job!
#endif

int cmp(const void *a, const void *b)
// optional, for qsort
{
return *(int *)a - *(int *)b;
}

int main(void)
{
int arr[ARRLEN]; // final array
int bag[NUMBERS]; // bag of available numbers
int avail = NUMBERS; // size of bag available
srand((unsigned)time(NULL));

// prepare the bag of available numbers
for(int i = 0; i < NUMBERS; i++) {
bag[i] = i + 1;
}

// fill the array with values from the bag
for(int i = 0; i < ARRLEN; i++) {
int index = rand() % avail; // random index into array
arr[i] = bag[index]; // take that number

avail--;
bag[index] = bag[avail]; // replace with the one from the top
}

// just to check, sort the array, can be deleted
qsort(arr, ARRLEN, sizeof arr[0], cmp);

// output the result
for (int i = 0; i < ARRLEN; i++) {
printf("%d ", arr[i]);
}
printf("\n");

getchar();
return 0;
}

我对数组进行了排序,以便于查看是否有重复项。该 qsort 行和 cmp 函数可以删除。

三次运行的程序输出

6 7 8 9 12 16 17 19 21 27 31 35 43 46 47 50 51 53 59 64 65 66 70 71 722 6 7 14 17 23 24 25 30 31 32 34 36 37 45 58 59 61 65 68 69 71 73 74 755 10 13 18 20 21 25 30 34 36 39 40 41 43 49 50 54 58 60 63 64 66 67 72 75

关于c - 如何生成不同整数的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55785744/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com