gpt4 book ai didi

c - 使用 Rand() 时模式的奇怪重复

转载 作者:行者123 更新时间:2023-12-04 00:13:35 28 4
gpt4 key购买 nike

生成 32 个字符串的示例随 secret 码/字符串生成器。因此,生成随机数并保留 33 到 127 之间的随机数,因为这些是构成有效文本的 ASCII 值。

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

int main()
{
srand(time(0));
clock_t start = clock();

long long iterations = 0;

printf("Generating String...\n\n\t\" ");

for (int i = 0; i < 32; i++)
{
long long holder = 0;
while(holder < 33 || holder > 126)
{
holder = rand();
iterations++;
}
putchar(holder);
}

clock_t end = clock();

printf(" \"\n\n%.2lf s , %lld iterations & %lld avg\n",(double)(end - start)/CLOCKS_PER_SEC,iterations,iterations/32);

return 0;
}

输出重复字符串DEX&H1_(okd/YVf8;49=el%<j:@"T,NU以一种或另一种形式。

一些输出:

Generating String...

" DEX&H1_(okd/YVf8;49=el%<j:@"T,NU "

9.11 s , 893836506 iterations & 27932390 avg
Generating String...

" xq?!#O]tDEX&H1_(okd/YVf8;49=el%< "

7.59 s , 768749018 iterations & 24023406 avg
Generating String...

" MJxq?!#O]tDEX&H1_(okd/YVf8;49=el "

7.63 s , 748742990 iterations & 23398218 avg

使用 cc file.c -o file 编译在 Clang/macOS 上。

最佳答案

您尝试获取某个范围内的随机数的方式效率极低。这也很可能是您看到的重复的来源。

您应该将返回的数字减少到所需范围内。

for (int i = 0; i < 32; i++)
{
int holder = (rand() % (126 - 33 + 1)) + 33;
putchar(holder);
}

关于c - 使用 Rand() 时模式的奇怪重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65930954/

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