乌龟和野兔模拟终止问题

时间:2014-09-23 16:45:32

标签: c++

#include<iostream>
#include<cstdlib>
#include<time.h>
#include<ctime>
#include<iomanip>
using namespace std;

const int End=70; //constant fixed integer for the entire game.

void MoveTurtoise (int *); 
void MoveHare (int *);
void PrintPosition (int *, int*);



int main()
{
int Tortoise = 1;
int Hare = 1;
int Time = 0;

srand(time(0));

cout<<"BANG!!!!!\n"
    <<"AND THEY'RE OFF !!!!!\n";

while( Tortoise != End && Hare != End )
{
    srand(time(0));
    MoveTurtoise (&Tortoise);
    MoveHare (&Hare);
    PrintPosition (&Tortoise,&Hare);
    Time++;

}

if (Tortoise==Hare)
        cout<<"It's a tie."<<endl;
    else if (Tortoise>Hare)
        cout<<"Tortoise wins."<<endl;
    else if (Hare>Tortoise)
        cout<<"Hare wins."<<endl;

system("PAUSE");
return 0;
}

void MoveTurtoise (int *Tortoise)
{
srand(time(0));
int p = 1+ rand()%10; // 1 <= i <= 10

if (1<=p && p<=5) //Fast plod
    Tortoise+=3; //3 squares right
else if (p>=6 && p<=7) //Slip
    Tortoise-=6;//6 squares left
else //Slow plod
    ++Tortoise; //1 square right

if (*Tortoise<1)
    *Tortoise=1;



}

void MoveHare (int *Hare)
{
srand(time(0));
int p = 1+ rand()%10; // 1 <= p <= 10

if (1<= p && p<=2); //Sleep
                    //No move
else if (p>=3 && p<=4) //Big hop
    Hare+=9;//9 squares right
else if (p==5) //Big Slip
    Hare-=12;// 12 squares left
else if (p>=6 && p<=8) // Small hop
    ++Hare;// 1 square right
else if (p>=9 && p<=10)// Small Slip
    Hare-=2; // 2 squares left

if (*Hare<1)
    *Hare=1;


}

void PrintPosition (int *Tortoise, int *Hare)
{
if (Tortoise==Hare)
    cout<<"OUCH!!!"<<endl;
else if (Tortoise<Hare)
    {
    cout<<setw(*Tortoise)<<"T"<<endl;
    cout<<setw(Hare-Tortoise)<<"H"<<endl;
    }
else if (Hare<Tortoise)
{
    cout<<setw(Tortoise-Hare)<<"T"<<endl;
    cout<<setw(*Hare)<<"H"<<endl;

}




}

大家好。我刚刚用C ++编写了Tortoise和Hare模拟游戏的代码。我有一个问题,找到导致我的程序的原因&#34;不是&#34;终止。它一直在继续,结果相同。我假设有一个循环错误和srand()的错误用法..但我仍然没有线索...

2 个答案:

答案 0 :(得分:1)

在函数MoveTurtoiseMoveHare中,您正在递增指针而不是它们的值。

void MoveTurtoise (int *Tortoise)
{
   srand(time(0));
   int p = 1+ rand()%10; // 1 <= i <= 10

   if (1<=p && p<=5) //Fast plod
      Tortoise+=3; //3 squares right
      // This makes Tortoise point to a different location.
      // It does not change the value of what Tortoise points to.
      // Similarly for the next two clauses.

   else if (p>=6 && p<=7) //Slip
      Tortoise-=6;//6 squares left
   else //Slow plod
      ++Tortoise; //1 square right

   if (*Tortoise<1)
      *Tortoise=1;
}

你需要什么:

void MoveTurtoise (int *Tortoise)
{
   srand(time(0));
   int p = 1+ rand()%10; // 1 <= i <= 10

   if (1<=p && p<=5) //Fast plod
      (*Tortoise) += 3; //3 squares right
   else if (p>=6 && p<=7) //Slip
      (*Tortoise) -= 6;//6 squares left
   else //Slow plod
      ++(*Tortoise); //1 square right

   if (*Tortoise<1)
      *Tortoise=1;
}

MoveHare需要以类似的方式修复。

这是一个更好的解决方案。更改将参数类型更改为int&,然后代码将更像您拥有的。

void MoveTurtoise (int& Tortoise)
{
   srand(time(0));
   int p = 1+ rand()%10; // 1 <= i <= 10

   if (1<=p && p<=5) //Fast plod
      Tortoise+=3; //3 squares right
   else if (p>=6 && p<=7) //Slip
      Tortoise-=6;//6 squares left
   else //Slow plod
      ++Tortoise; //1 square right

   if (Tortoise<1)
      Tortoise=1;
}

此外,您对PrintPosition的实现就好像参数是:

void PrintPosition (int Tortoise, int Hare);

这比你拥有的更好。变化

void PrintPosition (int *Tortoise, int *Hare);

void PrintPosition (int Tortoise, int Hare);

答案 1 :(得分:0)

是,user3543568198 你忘了使用std :: setw添加头库;并且你在你的print语句中添加了一个else if(Hare&lt; = Tortoise)与if else相矛盾,因为if ... else做同样的事情,但你的代码通过引用传递看起来都很好,除了你的Tortoise函数缺少raceEnd = .. ..在头发和乌龟的功能......只需用下面的功能替换你的程序功能,它实际上会移动屏幕上的单位...哦一定要添加 const int RACE_END = 70;在标题

void MoveTurtoise (int *Tortoise)
{
int x = 1 + rand() % 10;
// determine which move to make
if (x >= 1 && x <= 5)        // fast plod
    *Tortoise += 5;

else if (x == 9 )   // slip
    *Tortoise -= 12;

else                           // slow plod
    ++(*Tortoise);
if (*Tortoise < 1)
    *Tortoise = 1;

else if (*Tortoise > RACE_END)
    *Tortoise = RACE_END;

}



void MoveHare(int *Hare)
{
int y = 1 + rand() % 10;
/* Write statements that move hare */
// determine which move to make
if (y >= 1 && y <= 5)        // fast plod
    *Hare += 3;

else if (y == 6 || y == 7)   // slip
    *Hare -= 6;
else                           // slow plod
    ++(*Hare);

/* Write statements that test if hare is before
the starting point or has finished the race */
if (*Hare < 1)
    *Hare = 1;

else if (*Hare > RACE_END)
    *Hare = RACE_END;
}