简单算法求解

wxsxiaoK 2009-08-17 11:13:19
计算机随即产生一个4位数(此问题的原型是猜数字游戏),用户输入一个4位数与其比较。计算机返回用户猜中数字的个数和猜中数字的位置。当我在做猜中数字个数时出了疑问:我用数组存储的数据,但是没有找到一个很好的标准计算猜中数字的个数(2个4位数的各位的数字均是0~9随即的)。
本人菜鸟高手指点~
举个例子:
a[4]={5,6,5,7}//计算机随机产生的4位数
b[4]={5,5,5,5}
或者
a[4]={5,5,5,5}//计算机随机产生的4位数
b[4]={5,6,5,7}
主观判断很容易,求计算机实现~
...全文
118 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
hyram 2009-08-17
  • 打赏
  • 举报
回复
[Quote=引用楼主 wxsxiaok 的回复:]
计算机随即产生一个4位数(此问题的原型是猜数字游戏),用户输入一个4位数与其比较。计算机返回用户猜中数字的个数和猜中数字的位置。当我在做猜中数字个数时出了疑问:我用数组存储的数据,但是没有找到一个很好的标准计算猜中数字的个数(2个4位数的各位的数字均是0~9随即的)。
本人菜鸟高手指点~
举个例子:
a[4]={5,6,5,7}//计算机随机产生的4位数
b[4]={5,5,5,5}
或者
a[4]={5,5,5,5}//计算机随机产生的4位数
b[4]={5,6,5,7}
主观判断很容易,求计算机实现~

[/Quote]
判断完之后,把判断过的数字处理掉就好了,比如置为10。
wxsxiaoK 2009-08-17
  • 打赏
  • 举报
回复
随即产生4位数我会,正如2楼给的答案2和3,我想用计算机实现,请大家给个好算法~
  • 打赏
  • 举报
回复
没明白楼主问啥,用rand不就可以了?
yuhudie203 2009-08-17
  • 打赏
  • 举报
回复
用rand函数;
要产生数的个数count;
设定数的范围为n;
int a[count] = {0};

for(int i = 0; i <count ; i++)
{
a[i] = rand()%n+1;
}
产生的随机数就在1-n的范围内
yuhudie203 2009-08-17
  • 打赏
  • 举报
回复
你输入的数 和计算机随即的数之间的结果是什么?

随即的数有没有范围的限定?
liao05050075 2009-08-17
  • 打赏
  • 举报
回复
计算猜中数字的个数?
就是计算a,b中相同数字的个数?

a[4]={5,6,5,7}//计算机随机产生的4位数
b[4]={5,5,5,5}
这个是2?

a[4]={5,5,5,5}//计算机随机产生的4位数
b[4]={5,6,5,5}
这个是3?
lijian22500 2009-08-17
  • 打赏
  • 举报
回复
rand
随机函数
liuwg9999 2009-08-17
  • 打赏
  • 举报
回复

bool b[4]={false};
for(int i=0;i<4;i++)
{
if(a[i]==b[i])
{
b[i]=true;
}
}

b[i]中true的个数和位置不就是了
Y神圣 2009-08-17
  • 打赏
  • 举报
回复
cout<<"序列交换法"<<endl;
succ = 0;

#define RAND_MAX_VALUE 0x7fff
const int threshold = n / RAND_MAX_VALUE;

START: cout<<endl<<"Start";
//随机生成初值
for (int i = 0;i < n;i++)
{
if(i < n % RAND_MAX_VALUE)
{
angle[i] = rand() % RAND_MAX_VALUE;
len[i] = rand() % RAND_MAX_VALUE;
}
else
{
angle[i] = i% RAND_MAX_VALUE;
len[i] = i % RAND_MAX_VALUE;
}
div_t res = div(n,i+1);
if(res.quot <= 10 && res.rem == 0)
cout<<".";
}

//随机搅拌(两两交换)
srand((unsigned int)time(NULL));
MIX: for(int i = 0;i < n;i++)
{
int curr = (rand() + i) % n;
if (curr != i)
{
double temp = angle[i];
angle[i] = angle[curr];
angle[curr] = temp;
}
int curr2 = (rand() + i) % n;
if (curr != curr2)
{
double temp = len[curr];
len[curr] = len[curr2];
len[curr2] = temp;
}
div_t res = div(n,i+1);
if(res.quot <= 10 && res.rem == 0)
cout<<".";
}
//首尾对换(消除rand()函数的规律性)
for(int i =0;i < n;i++)
{
double temp = angle[i];
angle[i] = angle[n - i];
angle[n - i] = temp;
temp = len[i];
len[i] = len[n - i];
len[n - i] = temp;
div_t res = div(n,i+1);
if(res.quot <= 10 && res.rem == 0)
cout<<".";
}
//检验是否均匀(检验仍然在初始位置上的数字的个数)
CHECK: int counter1 = 0,counter2 = 0;
for( int i = 0;i < n;i++)
{
if (angle[i] == i % RAND_MAX_VALUE)
counter1 ++;
if (len[i] == i % RAND_MAX_VALUE)
counter2 ++;
div_t res = div(n,i+1);
if(res.quot <= 10 && res.rem == 0)
cout<<".";
}

if ((counter1 < threshold * 0.95 || counter1 > threshold * 1.05) || (counter2 < threshold * 0.95 || counter2 > threshold * 1.05))
{
cout<<endl<<"随机序列重新进行搅拌";
goto MIX;
}

//映射随机数范围
for (int i = 0;i< n;i++)
{
angle[i] = angle[i]; //* PI /RAND_MAX_VALUE;
len[i] = (len[i] * w / 2)/ RAND_MAX_VALUE;
}

网上找的一个随机数生成算法,希望对楼主有帮助。

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧