问个菜鸟级的问题!如何生成随机数
VC的win32编程中
如何在mine[9][9]这个数组中随机选择十个数,而且不能重复选择
问题点数:20、回复次数:8Top
1 楼kobefly(科比--网络学习中)回复于 2005-04-02 20:38:48 得分 5
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
void main( void )
{
int i;
/* Seed the random-number generator with current time so that
· the numbers will be different every time we run.
*/
srand( (unsigned)time( NULL ) );
/* Display 10 numbers. */
for( i = 0; i < 10;i++ )
printf( “ %6d\n”, rand() );
}
Top
2 楼horisly(SUN YAT-SEN UNIVERSITY (逸仙先生))回复于 2005-04-03 04:09:14 得分 0
reTop
3 楼arrowcy(长弓手)回复于 2005-04-03 11:06:54 得分 0
好像这个不满足要求吧?Top
4 楼arrowcy(长弓手)回复于 2005-04-03 11:11:20 得分 5
int a[10];
int i,j;
for (i=0;i<10;i++)
a[i]=rand()%(100-i);
for (i=1;i<10;i++)
for (j=0;j<i;j++)
if(a[i]>a[j])
a[i]++;
//以上程序在a[i]中产生了10个0-99之间的不同的随机数
x=a[i]/10;y=a[i]%10;
//这个x,y就分别对应于mine的二维,这样就可以用mine[x][y]来得到你要的数了Top
5 楼arrowcy(长弓手)回复于 2005-04-03 11:11:49 得分 0
上面那个a[i]>a[j]改为a[i]>=a[j]Top
6 楼shine51151(美丽心情)回复于 2005-04-03 12:13:07 得分 10
// VC的win32编程中 如何在mine[9][9]这个数组中
// 随机选择十个数,而且不能重复选择。
#include <iostream>
#include <cstdlib>
#include <time.h>
using namespace std;
#define M 9
#define N 10
void main()
{
int mine[M][M],a[N];
int t=1, m, n;
for(int i=0; i<M; i++)
for(int j=0; j<M; j++)
mine[i][j]=t++;
// 初始化二维数组mine[M][M],每个元素都不为0。
srand( (unsigned)time( NULL ) );
/*
Seed the random-number generator with current time so that
the numbers will be different every time we run.
*/
for(int k=0; k<N; k++)
{
m=rand()%M;
n=rand()%M;
// 产生两个0到(M-1)的随机整数作为二维数组mine[][]的下标。
if(!mine[m][n])
{
k--;
continue;
}
// 如果这次选择的数和前面的重复了,即该数已经被选过一次了,则重新选取。
a[k]=mine[m][n];
// 将选定的数存入一维数组
mine[m][n]=0;
// 将二维数组mine[][]中已被选过的元素置0作为不能再选的标记。
/*
注:这里的标记数mark的选择只要满足mark不是mine[][]的
任一元素的初始化时的值即可。
*/
}
for(int s=0; s<N; s++)
{
cout << a[s] << endl;
// 输出在mine[][]中随机选出的10个数。
}
}Top
7 楼zhousqy(标准C匪徒)(甩拉,甩拉)回复于 2005-04-03 12:18:28 得分 0
先srand(), 再rand()。Top
8 楼jblues(寻找猫的老鼠)回复于 2005-04-05 18:55:43 得分 0
已经解决
以下是我的代码,谢谢各位
//生成不重复的10个随机数,生成10个地雷所在位置
int k,l;
k=0;
l=0;
for (k=0;k<9;k++)
for (l=0;l<9;l++)
{
mine[k][l]=0;
mineno[k][l]=0;
mineok[k][l]=false;
}
int x,y;
int a[10];
x=0;
y=0;
for(x=0;x<10;x++)
a[x]=0;
x=0;
srand( (unsigned)time( NULL ) );
for( x = 0;x < 10;x++ )
{
a[x]=rand()%81+1;
k=a[x]/10;
l=a[x]-10*k;
mine[k][l]=1;
if(x!=0)
{
for(y=0;y<x;y++)
{
if(a[x]==a[y])
x=x-1;
else
{
k=a[x]/10;
l=a[x]-10*k;
mine[k][l]=1;
}
}
}
}Top




