您的位置:首页 > 其它

数学问题和狼追兔问题

2015-10-08 14:03 281 查看
数据结构算法之数学问题和狼追兔问题,java还没学完这里就用c++实现,不难请看代码。
//该程序简单实现4个数能组成多少个不同的三位数(不能重复),并且输出这些数。
#include "stdafx.h"
#include<iostream>

using namespace std;

int main()
{
int bw,sw,gw;
int count=0;
for(bw=1;bw<=4;bw++)
{
for(sw=1;sw<=4;sw++)
{
if(sw!=bw)//若十位不等于百位则可以继续放个位,否则+1继续判断(这里的if循环不需要else,因为不满足就递进+1,不需要执行其他语句,而且这里不满足情况不是break跳出循环而是递+1判断下一个数)
{
for(gw=1;gw<=4;gw++)
{
if((gw!=sw)&&(gw!=bw))//若个位不等于百位和十位时候,才可以放进去,否则继续+1判断
{
cout<<bw<<" "<<sw<<" "<<gw<<""<<endl;
count++;
}
}
}
}
}
cout<<"总共有"<<count<<"种"<<endl;
system("pause");
return 0;
}




//狼追兔就是,兔子躲在一个环形洞中,狼去洞里面找,狼的找完第一个洞,就会在第2洞找,然后会在第4洞找,下次在第7个洞找,即每次都是在n-1个环形洞中找兔子,其中有几个洞无论狼找不遍都永远找不到,我们就是利用循环求出这个洞
#include "stdafx.h"
#include<iostream>

using namespace std;

//开始设每个洞都为0,狼找过的洞赋值为1
void safehole(int *p,const int count)
{
int i,pos=0;
for(i=1;i<=count;i++)
p[i]=0;
p[pos]=1;
for(int j=2;j<5000;j++)//这里j设为5000尽可能说明狼找的次数多
{
pos=(pos+j)%count;//关键就是循环判断的步长,即狼下一个洞的位置为多少,一般环形的都是步长%总长度
p[pos]=1;//每次找过洞赋值为1
}
}

int main()
{
int count;//count表示洞的个数
int a[20]={0};
cout<<"这里有几个洞"<<endl;
cin>>count;
safehole(a,count);
//洞值为1必死,为0即安全
for(int i=0;i<count;i++)
{
if(a[i]!=0)
cout<<"躲在"<<i+1<<"必死"<<" ";
else
cout<<"\n"<<i+1<<"这洞不会被狼抓到"<<endl;
}
system("pause");
return 0;
}




这两个程序比较有意思,代码中我尽量详细解释,还是一句加油!学java去了哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: