C++ 使用数组从1到100生成10个随机数
到目前为止,我得到的是:C++ 使用数组从1到100生成10个随机数,c++,arrays,C++,Arrays,到目前为止,我得到的是: using namespace std; int main() { int i = 0; srand(time(0)); int array[10], i; for(int i=0; i<100; i++) : [i] = rand()%100+1; } return 0; } 使用名称空间std; int main(){ int i=0; srand(时间(0)); int数组[10],i
using namespace std;
int main() {
int i = 0;
srand(time(0));
int array[10], i;
for(int i=0; i<100; i++) :
[i] = rand()%100+1;
}
return 0;
}
使用名称空间std;
int main(){
int i=0;
srand(时间(0));
int数组[10],i;
对于(int i=0;i),如果你想要从一个集合中随机数,而不重复,那么考虑把这个集合改组,然后挑选第一个n个元素。然后你不必跟踪哪些项目已经被看到了。 首先,你不应该在两个地方声明i。这会产生一个可能的错误来源。
其次,应该将for循环后面的“:”替换为“{”。这将是第二个可能的错误源
第三,“[i]=rand()%100+1;”有问题。我建议您自己解决这个问题
另外,下次请拿出你的全部代码,因为这对于像我这样的程序员来说是很重要的,这样调试就更容易了。(我知道代码可能不完整,因为没有使用“int array[10]”。有一些“更奇特”的方法可以做到这一点,但要尽可能简单:
int main()
{
srand(time(0));
int array[10];
bool used[101] = {false};
for (int i = 0; i < 10; ++i)
{
do
{
array[i] = rand() % 100 + 1;
} while (used[array[i]);
used[array[i]] = true;
}
}
intmain()
{
srand(时间(0));
int数组[10];
bool使用[101]={false};
对于(int i=0;i<10;++i)
{
做
{
数组[i]=rand()%100+1;
}while(使用[array[i]);
使用的[array[i]]=true;
}
}
注意,你的for
循环测试是i如果你必须从一系列没有重复的数字中生成随机数,那么你的情况基本上与洗牌和发牌非常相似。这是因为你可以生成一组有限的值,一旦你使用了一个,你就不能再使用它了n、 解决此问题的一种方法是将所有可能的值放入一个数组中,然后洗牌该数组,您可以通过更改访问的索引从数组中“弹出”元素(就像从一副牌中“弹出”一张牌)并且生成的值将以随机顺序出现,而不会发生任何重复。如果对数组进行洗牌的额外开销很好,那么这种方法在概念上是最容易获得正确结果的方法之一。(如果您只需要非常少量的元素,并且您有一个非常大的数组,那么与其他选项相比,对整个数组执行随机洗牌通常会比较昂贵)
关于在现代C++中这样做有一组非常好的库函数(统计上优于<代码> RAND())/代码>,这样就不用处理所有通常涉及随机数生成的讨厌的事情。
#include <random>
#include <algorithm>
#include <iterator>
#include <iostream>
int main()
{
std::vector<int> v;
for(int i=0; i<100; i++){
v.push_back(i);
}
std::random_device rd;
std::mt19937 generator(rd());
std::shuffle(v.begin(), v.end(), generator);
std::copy(v.begin(), v.begin()+10, std::ostream_iterator<int>(std::cout, " "));
std::cout << "\n";
}
#包括
#包括
如果您需要在不修改数组的情况下生成值,请参阅一种方法。您的代码是否编译?@NipunTalukdar您真的应该去搜索web(所有答案都在web上!)如何修复for(int i=0;iNote:初始化v
的循环可以被std::itoa
替换。