Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Оцените решение задачки


Автор: mr.Anderson 11.6.2006, 23:31
Мож, не в тему тема создана (сорри за каламбур), но тем не менее.

Нашел в инете интересную задачку, попробовал сделать. Вот условие:
Цитата

В этой задаче мы воссоздадим один из истинно великих моментов истории, а именно, классическую гонку черепахи и зайца. Вы будете использовтаь генератор случайных чисел для разработки модели этого памятного события.
Наши соперники начинают гонку в первой клетке из 69 (номера от нуля). Каждая клетка представляет собой возможную позицию вдоль трассы гонки. Первый из соперников, достигший или миновавший клетку 69, награждается ведром моркови и салата. smile Трасса вьется по склону скользкой горы, так что участники гонки могут и падать.
Имеются часы, отбивающие такт раз в 0.2 секунды. С каждым тактом ваша программа должна устанавливать позиции животных согласно следующим правилам:

ЧЕРЕПАХА:
числа 0-4: +3 клетки к позиции,
числа 5-6: -6 клеток
числа 7-9: +1 клетка

ЗАЯЦ
числа 0-1: нет изменений позиции (типа он спит)
числа 2-3: +9
число 4: -12
5-7: +1
8-9: -2

Если позиции зайца и черепахи совпадут, считается, что черепаха кусает зайца (у зайца выводим вместо позиции AUCH!!!). Затем пишем, кто победил.

Прошу оценить мое решение:
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#include <iostream>
#include <conio>

using namespace std;
//---------------------------------------------------------------------------

void RabbitGenerator(int *pos);
void TurtleGenerator(int *pos);
//---------------------------------------------------------------------------

int main(void)
{
 int rabbit_pos=0,
     turtle_pos=0;

 bool finish=false;

 cout<<"Press any key to start racing!";
  getch();

 cout<<"\n\nBAMM!!! START!\n\nRABBIT\t\tTURTLE\n";

    randomize();

 while(!finish)
 {
  RabbitGenerator(&rabbit_pos);
  TurtleGenerator(&turtle_pos);

  if(rabbit_pos<0) rabbit_pos=0;
  if(turtle_pos<0) turtle_pos=0;

  if(turtle_pos>=69)
  {
   turtle_pos=69;
   finish=true;
  }

  if(rabbit_pos>=69)
  {
   rabbit_pos=69;
   finish=true;
  }

  if(rabbit_pos == turtle_pos )
   cout<<"AUCH!!!\t\t"<<turtle_pos<<"\n";

  else cout<<rabbit_pos<<"\t\t"<<turtle_pos<<"\n";

  Sleep(300);
 }

 if(rabbit_pos == turtle_pos)
  cout<<"Nikto ne pobedil!";

 else if(rabbit_pos==69)
  cout<<"Pobedil zayats. Ex.";

 else
  cout<<"Pobedila cherepaxa! Ura!";

 cout<<"\n\nRacing has ended! Press any key, please...";

 getch();
}
//---------------------------------------------------------------------------

void RabbitGenerator(int *rabbit_pos)
{
 switch(random(9))
 {
  case 0: case 1:
   break;

  case 2: case 3:
   *rabbit_pos+=9;
   break;

  case 4:
   *rabbit_pos-=12;
   break;

  case 5: case 6: case 7:
   *rabbit_pos+=1;
   break;

  default:
   *rabbit_pos-=2;
 }
}
//---------------------------------------------------------------------------

void TurtleGenerator(int *turtle_pos)
{
 switch(random(9))
 {
  case 5: case 6:
   *turtle_pos-=6;
   break;

  case 7: case 8: case 9:
   *turtle_pos+=1;
   break;

  default:
   *turtle_pos+=3;
 }
}
//---------------------------------------------------------------------------
   

Автор: Oleg_Ci 16.6.2006, 17:20
Вот, тоже решил задачку.
Цитата

Прошу оценить мое решение:
Вообще-то я сам ещё учиться программировать только начал... smile 
Самое первое что на ум пришло мне это то что в место перебора случайных чисел в подпрограммах
Код

void RabbitGenerator(int *pos);    
void TurtleGenerator(int *pos);

можно было использовать обыкновенный массив. Ещё мне непонравилась переменная bool finish=false; - посчитал что мне она ненужна. Ну и текст русский у меня выводится. Вобщем-то и всё.
Код

#include <windows.h>
#include <iostream>
#include <conio>
using namespace std;

char *rus(char *c)
{
  AnsiToOem(c,c);
  return c;
}

int main(int argc, char* argv[])
{
  char *c=rus("Чёрт побери!!!");
  int rabbit_pos=0, 
     turtle_pos=0; 
  int rabbit[]={3,3,3,3,-6,-6,1,1,1};
  int turtle[]={0,0,9,9,-12,1,1,-2,-2};

  cout<<rus("Нажмите любую клавишу для начала гонки.")<<endl<<endl;
  getch();
  cout<<rus("Заяц")<<"\t\t"<<rus("Черепаха")<<endl;
  randomize();

  while(rabbit_pos<69 && turtle_pos<69)
  {
    rabbit_pos+=rabbit[random(9)];
    turtle_pos+=turtle[random(9)];
    if ( rabbit_pos<0 ) rabbit_pos=0;
    if ( turtle_pos<0 ) turtle_pos=0;

    if(rabbit_pos == turtle_pos )
      cout<<c<<"\t"<<turtle_pos<<'\n';
    else cout<<rabbit_pos<<"\t\t"<<turtle_pos<<"\n";
    Sleep(100);
  }

  cout<<endl;
  if(rabbit_pos == turtle_pos)
    cout<<rus("Никто не победил !");
  else if ( rabbit_pos>turtle_pos )
    cout<<rus("Победил заяц ... Ээээээх... да чтоб его...");
  else cout<<rus("Ураааа! Победила черепаха ! Наши в переди планеты всей !!!");
  getch();
  return 0;
}
  

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)