int a[10] = {0,1,2,3,4,5,6,7,8,9};
int b[10];srand( (unsigned)time( NULL ) );b[0] = rand()%10; //b[0]为0~9之间的随机数for(int i = 1;i<10;i++)
{
b[i] = rand()%10; for(int j = 0;j<i;j++) //如果跟前面有一样的就不要,重新取
{
if(b[i] == b[j])
{
i = i - 1;
break;
}
}
}
int b[10];srand( (unsigned)time( NULL ) );b[0] = rand()%10; //b[0]为0~9之间的随机数for(int i = 1;i<10;i++)
{
b[i] = rand()%10; for(int j = 0;j<i;j++) //如果跟前面有一样的就不要,重新取
{
if(b[i] == b[j])
{
i = i - 1;
break;
}
}
}
{
b[i]=a[b[i]]; //比如b[3] = 7,则 b[3] = a[7]
}
int n = sizeof(x)/sizeof (int);
int i;
for (i=0; i < n; i++)
cout << x[i] << " ";
cout << endl; srand((unsigned)time(NULL));
for (i=n-1; i >0; i--)
{
int j= rand() % i;
int y = x[i];
x[i] = x[j];
x[j]=y;
} for (i=0; i < n; i++)
cout << x[i] << " ";
cout << endl;
int a[N];
int nTemp;
for(int i=0;i<N-1;i++)
{
int nPos=rand()%(N-i-1);//每次从前面的n 个数中随机选出一个,因为下标是从0开始的,所以要减1
nTemp=a[N-i];
a[N-i]=a[nPos];
a[nPos]=nTemp;
}
srand(40);
int a = rand();
int b = rand();
int c = rand();
int d = rand();
int e = rean();可能你用40作种子,每次运行程序得到的a都差不多大,但是e肯定是很随机的。
我的思路是,假如有10 个数,则每一步从前面的9个数中随机选一个数,让它和数组的最后一个数交换,第二步则剩下的前面9个数再一遍,这样一直到最后一个数为止!这样只需要做9遍就可以啦,因为只剩下一个数时,再交换就没有意义啦!
int a[10];
int nTemp;
for(int i=0;i<9;i++)
{
int nPos=rand()%(9-i);
nTemp=a[9-i];
a[9-i]=a[nPos];
a[nPos]=nTemp;
}
“每一步从前面的9个数中随机选一个数,让它和数组的最后一个数交换”
有没有想过,题目并没有说过每个数都不能是原来的数,你这样运行过后,"数组的最后一个数"就一定不能是原来的最后一个数了.
int nTemp;
for(int i=0;i<10;i++)
{
int nPos=rand()%10; //从10个数中取出一个和a[i]交换,可能是它自己。
nTemp=a[i];
a[i]=a[nPos];
a[nPos]=nTemp;
}
不过我以前做的扫雷的布雷算法是,一直是用这个算法的!
见笑了