求大神帮忙
今天有一道题做不出来……
编写一个发牌的程序:
我的思路是这样:
1、生成一个随机数然后%52;
2、然后生成第一张牌,记录下来;
3、然后再生成第二张牌,如果不重复就打印出来,否则重新生成;
4、打印出N张随机生成的牌。
但是今天想了一个下午也没弄好,在C++里面的哪个随机生成的函数不记得了……
我想求大神们给个完整的代码,我可以慢慢消化……
[解决办法]
欲生成随机数,主要用到两个函数srand,rand。头文件为:
#include <stdlib.h>
一、函数
1.srand
void srand ( unsigned int seed );
用法:它需要提供一个种子,这个种子会对应一个随机数,如果使用相同的种子后面的 rand() 函数会出现一样的随机数。为了防止随机数每次重复常常使用系统时间来初始化,即使用 time函数来获得系统时间,它的返回值为从 00:00:00 GMT, January 1, 1970 到现在所持续的秒数,然后将 time_t型数据转化为(unsigned)型再传给 srand 函数,即: srand((unsigned) time(&t)) 还有一个经常用法,即: srand((unsigned) time(NULL)); 直接传入一个空指针,因为你的程序中往往并不需要经过参数获得的 t 数据。srand((int)getpid()); 使用程序的ID (getpid()) 来作为初始化种子,在同一个程序中这个种子是固定的。
2.rand
int rand ( void );
产生一个伪随机数(根据 srand 初始的随机数种子),范围为 0 - RAND_MAX。RAND_MAX 至少为 32767,我电脑为 2147483647(int 型为32位),够用了喝。可通过取模来产生不同范围的随机数,如:
int value = rand() % (MAX + 1 - MIN) + MIN;
int genrand(long num, char *file)
{
long *dat = (long *)malloc(num * sizeof(long));
long *p = dat, i;
if (dat == NULL){
printf("malloc error, memory not enough!\n");
exit(1);
}
srand( (unsigned int)time(0) );
for (i = 0; i < num; i++){
dat[i] = rand();
}
/* 保存到文件中 */
FILE *fp = fopen(file, "w");
if (fp == NULL){
printf("fopen error, can't open file %s!\n", file);
exit(2);
}
while (*p){
fprintf(fp, "%ld\n", *p++);
}
free(dat);
fclose(fp);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int d[6];
int i,n,a,b,t;
int c,j;
void main() {
srand(time(NULL));
printf("shuffle 0..n-1 demo\n");
for (n=1;n<=5;n++) {/* 测试1~5个元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j为n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
for (i=0;i<n;i++) d[i]=i;/* 填写0~n-1 */
for (i=n;i>0;i--) {/* 打乱0~n-1 */
a=i-1;b=rand()%i;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=0;i<n;i++) printf("%d",d[i]);
printf("\n");
}
}
printf("shuffle 1..n demo\n");
for (n=1;n<=5;n++) {/* 测试1~5个元素 */
printf("_____n=%d_____\n",n);
j=1;
for (c=1;c<=n;c++) j=j*c;/* j为n! */
j*=n*2;
for (c=1;c<=j;c++) {/* 测试n*2*n!次 */
for (i=1;i<=n;i++) d[i]=i;/* 填写1~n */
for (i=n;i>1;i--) {/* 打乱1~n */
a=i;b=rand()%i+1;
if (a!=b) {t=d[a];d[a]=d[b];d[b]=t;}
}
printf("%04d:",c);
for (i=1;i<=n;i++) printf("%d",d[i]);
printf("\n");
}
}
}