如何解决生成不同数字的序列
我正在尝试生成一个由 6 个随机数组成的序列,所有数字都互不相同(没有重复的数字)。但是,当我尝试通过尝试将它们打印出来来测试我是否已成功生成这些数字时,代码编译成功但屏幕上没有任何显示。我对函数 erase() 的使用似乎有问题,因为一旦我删除它,代码就会产生一些输出,尽管不是我想要的。
#include<bits/stdc++.h>
#include<time.h>
using namespace std;
int main(void)
{
srand(time(NULL));
vector<int>v;
vector<int>V;
int arr[6];
int i,j;
for(i=1;i<=6;i++)
{
V.push_back(i);
}
for(int i=0;i<6;i++)
{
cout<<V[i]<<" ";
}
for(int i=0;i<6;i++)
{
int n=rand()%6;
v.push_back(V[n]);
V.erase(V.begin()+n);
}
cout<<endl;
for(int i=0;i<6;i++)
{
cout<<V[i]<<" ";
}
return 0;
}
解决方法
您使用了错误的算法:
- 生成六个随机数
- 如果有一些是平等的,做一些事情。
这样更好:
- 列出所有可能的数字。
- 从该列表中随机抽取一个数字并将其从列表中删除。这样做六次。
您应该使用 std::shuffle
重新排列您的号码
#include <vector>
#include <iostream>
#include <random>
#include <algorithm>
#include <numeric>
void print_numbers(const std::vector<int> & numbers) {
for (int number : numbers) {
std::cout << number << " ";
}
std::cout << std::endl;
}
int main() {
std::vector numbers(6);
std::iota(numbers.begin(),numbers.end(),1);
print_numbers(numbers);
std::random_device rd; // ok for small quantities like this,generally prefer a std::default_random_engine with some seed
std::shuffle(numbers.begin(),rd);
print_numbers(numbers);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。