C++ 写了个生成随机数的函数,但调用的时候出了点问题,请问有两个参数的函数怎么声明?
下面是两个函数用来生成随机数//函数:RandomInit//该函数取当前系统时间作为随机数发生器的种子voidRandomInit(){srand(time(NULL)...
下面是两个函数用来生成随机数
//函数:RandomInit
//该函数取当前系统时间作为随机数发生器的种子
void RandomInit()
{
srand(time(NULL));
}
// 函数:RandomInteger
// 该函数将0到RAND_MAX的区间的划分成high - low + 1 个
// 子区间。当产生的随机数落在第一个子区间时,则映射成low。
// 当落在最后一个子区间时,映射成high。当落在第i个子区间时
//(i从0到high-low),则映射到low + i
int RandomInteger(int low, int high)
{
return (low + (high - low + 1) * rand() / (RAND_MAX + 1));
}
然后我现在想在mian函数里调用它们来生成随机数,我是这样写的:
int main()
{
int in[3],rand[3];
int i,j,k,A,B;
void RandomInit();
int RandomInteger(int,int);
for(i=0;i<=2;i++)
{
in[i]=RandomInteger(0,9);
}
k=0;
while(k<=6)
{
cout<<"请输入你要猜测的数字:"<<endl;
for(i=0;i<=2;i++)cin>>in[i];
A=B=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
if(i==j)A++;
else B++;
}
}
cout<<A<<"A"<<B<<"B"<<endl;
k++;
}
return 0;
}
但是运行的时候有问题呀,无论输入什么数字都是0A0B,我觉得应该是生成随机数那块出了问题。。
求指导,谢谢!
1、游戏开始,电脑随机生成三个不重复的十以内的数字。
2、玩家输入他所猜测的三个数字
3、将玩家提交的数与电脑生成的数进行比较,结果显示成"*A*B"。A代表位置正确数字也正确,B代表数字正确但位置不正确,比如:"2A0B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了0个数字,但位置不对。
4、玩家共有7次机会,在7次内,如果结果为“3A0B”,游戏成功。如果7次里玩家都没有猜对游戏失败。 展开
//函数:RandomInit
//该函数取当前系统时间作为随机数发生器的种子
void RandomInit()
{
srand(time(NULL));
}
// 函数:RandomInteger
// 该函数将0到RAND_MAX的区间的划分成high - low + 1 个
// 子区间。当产生的随机数落在第一个子区间时,则映射成low。
// 当落在最后一个子区间时,映射成high。当落在第i个子区间时
//(i从0到high-low),则映射到low + i
int RandomInteger(int low, int high)
{
return (low + (high - low + 1) * rand() / (RAND_MAX + 1));
}
然后我现在想在mian函数里调用它们来生成随机数,我是这样写的:
int main()
{
int in[3],rand[3];
int i,j,k,A,B;
void RandomInit();
int RandomInteger(int,int);
for(i=0;i<=2;i++)
{
in[i]=RandomInteger(0,9);
}
k=0;
while(k<=6)
{
cout<<"请输入你要猜测的数字:"<<endl;
for(i=0;i<=2;i++)cin>>in[i];
A=B=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
if(i==j)A++;
else B++;
}
}
cout<<A<<"A"<<B<<"B"<<endl;
k++;
}
return 0;
}
但是运行的时候有问题呀,无论输入什么数字都是0A0B,我觉得应该是生成随机数那块出了问题。。
求指导,谢谢!
1、游戏开始,电脑随机生成三个不重复的十以内的数字。
2、玩家输入他所猜测的三个数字
3、将玩家提交的数与电脑生成的数进行比较,结果显示成"*A*B"。A代表位置正确数字也正确,B代表数字正确但位置不正确,比如:"2A0B"表示您有2个数字的位置正确且数值也正确,除此以外,您还猜对了0个数字,但位置不对。
4、玩家共有7次机会,在7次内,如果结果为“3A0B”,游戏成功。如果7次里玩家都没有猜对游戏失败。 展开
3个回答
展开全部
两个问题:
每次取随机数必须先重新初始化,否则取出数据会一样
参数没有问题,取随机数的返回运算并不好,MAX范围太大而且可能产生溢出,建议改成取余数模式
int RandomInteger(int low, int high)
{
return (low + rand()%(high - low + 1) );
}
for(i=0;i<=2;i++)
{
RandomInit();
in[i]=RandomInteger(0,9);
}
更多追问追答
追问
我把初始化的条件加进去了,但运行时还是不对呀,输入任何3个数出来的都是0A0B。。
还有其实我没懂MAX那个语句为什么范围会太大溢出呀?
谢谢!
追答
void RandomInit()
{
srand(time(NULL));
}
int RandomInteger(int low, int high)
{
return (low + rand()%(high - low + 1));
}
int main()
{
int in[3],rand[3];
int i,j,k,A,B;
void RandomInit();
int RandomInteger(int,int);
for(i=0;i<=2;i++)
{
RandomInit();
rand[i]=RandomInteger(0,9);
}
k=0;
while(k<=6)
{
cout<<"请输入你要猜测的数字:"<<endl;
for(i=0;i<=2;i++)cin>>in[i];
A=B=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
if(i==j)A++;
else B++;
}
}
cout<<A<<"A"<<B<<"B"<<endl;
k++;
}
return 0;
}
你的代码逻辑错误,rand[i]没有赋值,以上代码调试ok
展开全部
A代表什么,B代表什么
如果A代表猜中次数,B代表失败次数的话
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
{
if(i==j)
A++;
}else B++;
}
}
如果A代表猜中次数,B代表失败次数的话
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
{
if(i==j)
A++;
}else B++;
}
}
追问
不好意思,前面没把题目要求讲清楚
我现在把A和B的含义加在问题补充里了
追答
#include<iostream>
using namespace std;
#include <stdlib.h>
#include <time.h>
void RandomInit()
{
srand(time(NULL));
}
int RandomInteger(int low, int high)
{
return (low + rand()%(high - low + 1));
}
int main()
{
int in[3],rand[3];
int i,j,k,A,B;
void RandomInit();
int RandomInteger(int,int);
RandomInit();//放在循环外
for(i=0;i<=2;i++)
{
rand[i]=RandomInteger(0,9);
}
k=0;
while(k<=6)
{
cout<<"请输入你要猜测的数字:"<<endl;
for(i=0;i<=2;i++)cin>>in[i];
A=B=0;
for(i=0;i<=2;i++)
{
for(j=0;j<=2;j++)
{
if(in[i]==rand[j])
if(i==j)A++;
else B++;
}
}
cout<<A<<"A"<<B<<"B"<<endl;
k++;
}
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
生成某个范围内随机数应该是:low+rand()%(high-low+1)
RAND_MAX 是代表随机数的最大值,你rand如果产生小于它的值的话,两个整数除就是0了。
RAND_MAX 是代表随机数的最大值,你rand如果产生小于它的值的话,两个整数除就是0了。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询