我想创建一个随机字符串,由字母数字字符组成.我希望能够指定字符串的长度.
我如何在C++中执行此操作?
这个问题是关于这个问题的评论
推荐的方法来初始化srand?第一条评论说srand()应该只在应用程序中调用ONCE.为什么会这样?
我需要一种'好'的方法来初始化C++中的伪随机数生成器.我发现一篇文章指出:
为了生成类似随机数的数字,srand通常被初始化为一些独特的值,就像那些与执行时间相关的值.例如,函数时间返回的值(在标题ctime中声明)每秒都不同,这对于大多数随机需求来说足够独特.
Unixtime对我的应用来说并不是很有特色.有什么更好的方法来初始化它?奖励点是否可移植,但代码主要在Linux主机上运行.
我正在考虑做一些pid/unixtime数学来得到一个int,或者可能从中读取数据/dev/urandom.
谢谢!
编辑
是的,我实际上是每秒多次启动我的应用程序而且我遇到了碰撞.
每当我运行此代码时,我都会得到相同的结果.
程序
#include<stdlib.h>
int main(int agrc, const char *argv[]) {
int i = rand();
printf("%d\n",i);
for(i=0;i<10;i++) {
printf("%d\n",rand());
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
41
18467
6334
26500
19169
15724
11478
29358
26962
24464
5705
Run Code Online (Sandbox Code Playgroud)
我跑了这个mingw.其实我在学习Objective-C
请帮我.
我正在使用Beowulf集群上的MPI进行并行编程.我们为模拟退火编写了并行算法.它工作正常.我们希望执行速度比串行代码快15倍.但是我们在不同的体系结构和操作系统上执行了一些串行C代码,因此我们可以使用不同的数据集来进行性能测量.我们在代码中使用了这个Random函数.我们在windows和ubuntu linux上都使用GCC.我们发现linux上的执行需要更长的时间,而且我们不知道为什么.有人可以使用gcc在linux和windows上编译此代码并尝试解释我.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main (int argc, char** argv){
double Random();
int k,NUM_ITERATIONS = 10;
clock_t start_time = clock();
NUM_ITERATIONS=atoi(argv[1]);
// iniciranje random generatora
srand(time(NULL));
for(k=0; k<NUM_ITERATIONS; k++){
double raa = Random();
}
clock_t end_time = clock();
printf("Time of algorithm execution: %lf seconds\n", ((double) (end_time - start_time)) / CLOCKS_PER_SEC);
return 0;
}
// generate random number bettwen 0 and 1
double Random(){
srand(rand());
double a = rand();
return a/RAND_MAX;
}
Run Code Online (Sandbox Code Playgroud)
如果我用100,000 000执行它作为NUM_ITERATIONS的参数,我在linux上的执行速度比在Windows上慢20倍.在具有相同架构的机器上进行测试,双启动win + ubuntu linux.我们需要帮助,因为这个随机函数是我们想要用我们的数据显示的瓶颈.
我的问题首先是理解#ifndef和#ifdef.我也想明白之间的差别#if,#ifndef和#ifdef.我明白这#if基本上是一个if语句.例如:
#include<iostream>
#define LINUX_GRAPHICS 011x101
int main(){
long Compare = LINUX_GRAPHICS;
#if Compare == LINUX_GRAPHICS
std::cout << "True" << std::endl;
#endif
}
Run Code Online (Sandbox Code Playgroud)
但其他人,虽然我读到了他们,但我无法理解.它们看似非常相似,但我怀疑它们的工作方式类似.非常感谢帮助.
到目前为止这是我的文件:
#include <stdio.h>
int main(void) {
int y;
y = generateRandomNumber();
printf("\nThe number is: %d\n", y);
return 0;
}
int generateRandomNumber(void) {
int x;
x = rand();
return x;
}
Run Code Online (Sandbox Code Playgroud)
我的问题是rand()总是返回41.我在win上使用gcc ...不知道该怎么做.
编辑:使用时间生成随机数将无法正常工作.它为我提供了一个数字(12000),每次我调用它只是稍微高一点(大约每秒+3).这不是我需要的随机性.我该怎么办?
这是我的代码:
int main(int argc, char** argv) {
int sleeptime = atoi(argv[1]);
int sleepCount = atoi(argv[2]);
int sleepTimeRandom = 1 + (rand() % (int)(sleeptime));
int sleepCountRandom = 1 + (rand() % (int)(sleepCount));
sleepTimeRandom = sleepTimeRandom * 1000;
DWORD id = GetCurrentProcessId();
cout << "\n\nProcess with id " << id << " will sleep for " << sleepTimeRandom << " milliseconds\n";
cout << "\n\nProcess with id " << id << " will sleep " << sleepCountRandom << " times \n";
Run Code Online (Sandbox Code Playgroud)
当我打电话给exe时
sleeper …Run Code Online (Sandbox Code Playgroud) 我有一个简单的整数向量,只有4个值.我想循环遍历向量,为每个值分配0或1.我希望它随机到每次都不同的程度.
我认为以下就足够了:
for (int i = 0; i < (int)numberVect.size(); i++)
{
numberVect[i] = rand() % 2;
}
Run Code Online (Sandbox Code Playgroud)
但是,我发现每次关闭并重新打开程序时,都会分配完全相同的值.
所以第一次通过它将是1,0,0,0,然后如果我再次运行循环而不关闭程序它将是0,1,0,1.这看起来很完美.
但是,关闭程序并重新启动后,我会发现第一个序列将再次为1,0,0,0,第二个序列将再次为0,1,0,1.
另外,我有关于这个问题的第二个问题:
你能建议一种方法来确保向量中的至少一个值是1吗?同时仍然允许随机生成无缝地工作?
非常感谢,我希望你们可以提供帮助:D
我正在开发一个应用程序.我正在使用:
int rand_num = rand() % 100;
Run Code Online (Sandbox Code Playgroud)
获得一个介于0到99之间的随机整数.现在,假设我得到41,然后重新启动我的应用程序,它始终是41.相同的序列一遍又一遍,意味着它不是真正随机的.
有解决方案吗