Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача поиска последовательности операций над числами на C++

49K
04 июня 2009 года
MaxO_oN
1 / / 04.06.2009
Случайным образом получены 6 шашек среди 24, образованных следующим образом: двойной набор из 10 шашек с числами от 1 до 10; четыре шашки с числами 25,50,75,100. Случайным образом выбирается трехзначное целое число (100 - 999,включая границы). Задача состоит в том, что нужно за 45 сек. обнаружить последовательность операций, использующих только значения выбранных шашек, причем каждую не более одного раза, и соединить их знаками + - * / (деление разрешается только нацело, без остатка).

Пытался решить, вот что получилось:
Код:
#include <stdio.h>
#include <vcl.h>
#include <conio.h>
#include <time.h>
#include <dos.h>
#include <iostream.h>
int Add(int,int);
int Sub(int,int);
int Mul(int,int);
int Div(int,int);
int shashki[24]={1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,25,50,75,100};
int user_nums[6];
int chislo,x,Result;
long time_start,time_stop,time_now,time_x,timer;
long b;

#pragma hdrstop

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

#pragma argsused

char bufRus[256];
char* Rus(const char* text)//Функция для русификации выводимой информации
{
  CharToOem(text,bufRus);
  return bufRus;
}

int Add(int x,int y)//функция сложения
{
  Result=x+y;
  return Result;
}

int Sub(int x,int y)//функция вычитания
{
  Result=x-y;
  return Result;
}

int Mul(int x,int y)//функция умножения
{
  Result=x*y;
  return Result;
}

int Div(int x,int y)//функция деления
{
  Result=x/y;
  if (Result*y==x)
  {
  return Result;
  }
}

void Select_Operation(int j, int x, int y) //функция для выбора операции
{
 switch (j)
 {
 case 0:
  Add(x,y);
 case 1:
  Sub(x,y);
 case 2:
  Mul(x,y);
 case 3:
  Div(x,y);
 }
}

void Wait(void)
{
 time_start=GetTickCount();
 time_stop=GetTickCount()+45000;
 for (int i=0;i<=45;i++)
{
 time_now=GetTickCount();
 if (time_now!=time_stop)
 {
   timer=GetTickCount()+1000;
update:   time_x=GetTickCount();

   while (time_x<=timer)
   {
    goto update;
   }
   cout<<45-i<<endl;
 }
}
}

int main(int argc, char* argv[])// Основная программа
{
randomize();
chislo=random(999);
while (chislo<=99)
{
 randomize();
 chislo=random(999);
}
x=random(24);
user_nums[0]=shashki[x];
x=random(24);
user_nums[1]=shashki[x];
x=random(24);
user_nums[2]=shashki[x];
x=random(24);
user_nums[3]=shashki[x];
x=random(24);
user_nums[4]=shashki[x];
x=random(24);
user_nums[5]=shashki[x];
cout<<Rus("Твоя песенка спета, любопытный!")<<endl<<endl;
cout<<Rus("  Случайным образом получены 6 шашек среди 24, образованных следующим")<<endl;
cout<<Rus("образом: двойной набор из 10 шашек с числами от 1 до 10; четыре шашки с ")<<endl;
cout<<Rus("числами 25,50,75,100.")<<endl;
cout<<Rus("  Случайным образом выбирается трехзначное целое число (100 - 999,включая")<<endl;
cout<<Rus("границы).")<<endl<<endl;
cout<<Rus("Задача состоит в том, что нужно за 45 сек. обнаружить последовательность")<<endl;
cout<<Rus("операций, использующих только значения выбранных шашек, причем каждую не")<<endl;
cout<<Rus("более одного раза, и соединить их знаками + - * / (деление разрешается")<<endl;
cout<<Rus("только нацело, без остатка).")<<endl<<endl;
cout<<Rus("Ваше число: ")<<chislo<<endl;
cout<<Rus("Ваши шашки: ")<<user_nums[0]<<" "<<user_nums[1]<<" "<<user_nums[2]<<" "<<user_nums[3]<<" "<<user_nums[4]<<" "<<user_nums[5]<<endl;
Wait();
Result=user_nums[0];
repeat: for (int i=0,k=5;i<=5,k>=0;i++,k--)
{
  for (int j=0;j<=3;j++)
  {
    Select_Operation(j,Result,user_nums[k]);
  }
}
if (Result!=chislo)
{
cout<<Result<<endl;
 goto repeat;
}
cin>>"";
        return 0;
}


Но не получается найти подходящий алгоритм. Помогите!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог