C++ 得到1到100的乱序数(看看哪错了)

来源:百度知道 编辑:UC知道 时间:2024/05/22 06:01:52
#include<iostream.h>
#include<stdlib.h>
#include<time.h>
#include<math.h>
void main()
{
const int N = 100;
int A[N];
int B[1];
for ( int i=0; i<100; i++)
{
A[i] = i+1;
cout <<A[i]<<" ";
}
cout<<endl;
for ( i=0; i<100; i++)
{
srand((int)time(0));
B[0]=rand()*100/RAND_MAX+1;
int k=B[0];
int t=A[i];
A[i]=A[k];
A[k]=t;
}
for (i=0; i<100; i++)
cout <<A[i]<<" ";
cout<<endl;
}
谢谢一楼,但还是不能达到获得乱序数的目的啊

srand((int)time(0));
for ( i=0; i<100; i++)
{

B[0]=rand()*100/RAND_MAX+1;
int k=B[0];
int t=A[i];
A[i]=A[k];
A[k]=t;
}

初始化一个100元素的数组或者vector。其中每一元素值为其下标。
0-99中得到随机数i
取出并删除数组/vector中下标为i的元素。
0-98中得到随机数i
取出并删除数组/vector中下标为i的元素。
直到取出最后一个数。

取出的就是1-100随机数列。

给你提示一个思路:
先创建一个1~100正序的数组,然后用swap()函数随机的交换里面的任意两个数,做50次即可,这样出来的数组非常随机,并且没有重复数。
代码暂不提供现成的,希望你能自己完成!

数组越界,rand()*100/RAND_MAX+1可以到100