📄 ant.cpp
字号:
#include<iostream>
using namespace std;
//常量设置
const int APOS=0; //A点位置
const int BPOS=30; //B点位置
const int MAXANT=5; //最大蚂蚁数
const int SPEED=1; //速度
//全局变量
//初始位置已知量(必须是奇数)
int poslist[MAXANT]={3,7,11,17,23};
//用5位二进制数表示5只蚂蚁的开始方向 00000~11111,共32种
enum ANTFLAG{
ANTFLAG1 = 0x1,
ANTFLAG2 = 0x2,
ANTFLAG3 = 0x4,
ANTFLAG4 = 0x8,
ANTFLAG5 = 0x10
//ANTFLAG6 = 0X20 //假如有更多只
//...
};
int antflist[]={ANTFLAG1,ANTFLAG2,ANTFLAG3,ANTFLAG4,ANTFLAG5};
//根据二进制数求蚂蚁的开始方向
int StartDir(int val1,int val2){
int ir=(antflist[val1]&val2) ? 1:-1;
return ir;
}
class Ant;
//蚂蚁类
class Ant{
private:
int m_id; //蚂蚁id编号(0~4)
bool m_life; //生命状态,初始为1,离开杆后为0
int m_pos; //木杆上坐标(0~27)
int m_dir; //方向(1,-1)
int m_speed; //速度(1)
int m_time; //爬行时间(0~?)
public:
static int count; //现有蚁数
static int antlist[MAXANT]; //存储每个蚂蚁的位置
public:
Ant();
void Init(); //蚂蚁初始化
int GetId(){return m_id;} //获得ID编号
int GetTime(){return m_time;} //返回时间
void SetDir(int val){ m_dir=StartDir(m_id,val);} //初始方向
void CheckLife(); //检测生命状态
void ChangeDir(); //相遇改变方向
void RunPos(); //每秒后的位置
void Print(){cout<<"id: "<<m_id<<" pos: "<<m_pos
<<" dir: "<< m_dir<<" time:" <<m_time<<endl;}
};//end ANT
Ant::Ant(){ m_id=count;Init();count++;}
void Ant::Init(){
m_pos=poslist[m_id];
m_speed=SPEED;
m_life=1;
m_time=0;
}
void Ant::CheckLife (){
if(m_life){
if(m_pos<APOS || m_pos>BPOS)
{
m_life=0;
count--;
}
else
m_time++;
}
}
void Ant::ChangeDir(){if(m_life){m_dir*=-1;}}
void Ant::RunPos(){
if(m_life)
m_pos+=m_dir*m_speed;
antlist[m_id]=m_pos;
}
//一个作用蚂蚁类的类
class FunAnt{
public:
int lasttime; //最后一只蚂蚁离开的时间
Ant ants[MAXANT]; //蚂蚁对象数组共5只
public:
FunAnt(){}
//设置蚂蚁初始方向
void Funsetdir(int d){
for(int i=0; i<MAXANT;i++)
ants[i].SetDir(d);
}
//屏幕输出所有蚂蚁信息
void print(){
for(int i=0;i<MAXANT;i++)
ants[i].Print();
}
//一直到最后一只蚂蚁离开木杆,输出每只蚂蚁所用时间
void Run()
{
while(ants[0].count){
for(int i=0;i<MAXANT;i++)
{
ants[i].RunPos(); //移动蚂蚁位置
ants[i].CheckLife(); //检测蚂蚁是否在杆上
}
ChangeDir(); //检测,如果蚂蚁相遇改变方向
}
lasttime=ants[0].GetTime();
for(int i=1; i<MAXANT;i++)
{
bool b=lasttime<ants[i].GetTime();
if(b){lasttime=ants[i].GetTime();}
}
print();
}
//检测相邻蚂蚁位置函数,如果位置相同就调用改变方向函数
void ChangeDir(){
for(int i=0;i<MAXANT-1;i++)
{
if(ants[0].antlist[i]==ants[0].antlist[i+1])
{
ants[i].ChangeDir();
ants[i+1].ChangeDir();
}
}
}
};
int Ant::antlist[]={3,7,11,17,23};
int Ant::count=0;
//////////////////////////////////////////
int main(){
int maxlist[32]; //存储32次的结果数组
for(int i=0;i<32;i++){
Ant::count =0;
FunAnt a1;
a1.Funsetdir(i);
a1.Run();
maxlist[i]=a1.lasttime;
cout<<"lasttime:"<<a1.lasttime<<endl;
}
int min,max;
min=max=maxlist[0];
for(int i=0;i<32 ;i++)
{
if(max<maxlist[i])
max=maxlist[i];
if(min>maxlist[i])
min=maxlist[i];
}
cout<<"max:"<<max<<endl
<<"min:"<<min<<endl;
return 0;
}//end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -