Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
 Аватар для Ryu
0 / 0 / 0
Регистрация: 25.09.2009
Сообщений: 5

Какую структуру данных, алгоритм применить для такой задачи?

28.04.2011, 03:12. Показов 1079. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Задача следующая : Представьте себе что вы разработчик игры, какой-нибудь аркады. В конце как обычно есть главарь(босс) с которым предстоит драться. Так вот нужно разработать что то типа интеллекта босса, т.е. ход его действий. У босса есть : 5 обычных удара, и 3 супер удара. Условия :
1. Супер удар не может быть сделан первым.
2. Удары повторяться не могут.
3. В битве должны быть использованы все удары.
4. Перед каждым супер ударом должно быть как минимум 2 обычных.

Так вот вопрос в чем - какую структуру данных, алгоритм применить для такой задачи. Была мысль использовать Декартово дерево, но опять же до конца не могу додумать как все между собой связать.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.04.2011, 03:12
Ответы с готовыми решениями:

Существует ли алгоритм для решения такой задачи?
Есть 2 таблицы Первая это документы поступления товаров Дата Номер Сумма 01.03.19 П1 1500 01.03.19 П2 3200 ...

Какую структуру данных выбрать для многосвязного многоугольника
Приветствую всех! Собственно, нужно выбрать какую-то структуру данных для представления многосвязного многоугольника . Т.е. имеется...

Какую применить технологию для сравнения двух баз данных
Добрый день. попробую объяснить допустим для примера имеются такие данные на сегодняшнюю дату: ФИО: ИВАНОВ Место жительства:...

3
 Аватар для teleprog
177 / 149 / 43
Регистрация: 14.08.2008
Сообщений: 1,290
29.04.2011, 03:30
на делфи бы гдето так написал
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
var  
mas:array[ 1..8,1..2]of integer; //массив ударов 1-счетчик ударов этого типа, 2-сила  этого удара
LastUdar, //номер удара последнего удара
CountProst //кол-во простых ударов  в  серии
:integer;
 
life:integer;  //жизнь жертвы боса
begin
  for i:=1  to  5 do mas[i,2]:=random(10);  //записываем силу  ударов
  for i:=6  to  8 do mas[i,2]:=20+random(10); // и суперударов
  life:=200; //жизнь жертвы 200 здоровья
  lastudar := 8; 
  countProst:=0;
 
  while life>0 do //пока  жертва  жива)
  begin
    
   if countProst=2 then //если была серия из 2х простых ударов то..
    begin 
      ..из 3х суперударов выбираем тот которым  били меньше  раз, т.е. mas[i,1]меньше всего.
      ..и пишем номер удара в  LastUdar;
      countProst:=0; 
    end
   else
    begin
      ..из 5и ударов выбираем тот которым  били меньше  раз, т.е. mas[i,1]меньше всего и номер неравен LastUdar       
      ..и пишем номер удара в  LastUdar;
      countProst:=countProst+1; 
    end;
    life:=life - mas[lastudar,2];//бьем  жертву
    mas[lastudar,1]:= mas[lastudar,1]+1; //увеличиваем  счетчик  этих ударов
    if life<0 then  проверяем если какимто ударом  еще  небили(mas[i,1]=0) то лечим  жертву life:=100;
      
  end;
end;
0
Эксперт С++
 Аватар для Mr.X
3225 / 1752 / 436
Регистрация: 03.05.2010
Сообщений: 3,867
30.04.2011, 06:45
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
/////////////////////////////////////////////////////////////////////////////////////////
//Задача следующая : Представьте себе что вы разработчик игры, какой-нибудь аркады. 
//В конце как обычно есть главарь(босс) с которым предстоит драться. 
//Так вот нужно разработать что-то типа интеллекта босса, т.е. ход его действий. 
//У босса есть : 5 обычных ударов, и 3 супер удара. 
//Условия :
//  1. Супер удар не может быть сделан первым.
//  2. Удары повторяться не могут.
//  3. В битве должны быть использованы все удары.
//  4. Перед каждым супер ударом должно быть как минимум 2 обычных.
//
//Так вот вопрос в чем - какую структуру данных, алгоритм применить для такой задачи.
/////////////////////////////////////////////////////////////////////////////////////////
//Первое условие поглощается четвертым, поэтому оно излишне.
//Третье условие обеспечивается тем, что удары генерируются с равной вероятностью.
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <cstdlib>
#include <ctime>
#include <iostream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
enum  T_blow
{
    BLOW_1,
    BLOW_2,
    BLOW_3,
    BLOW_4,
    BLOW_5,
 
    SUPER_BLOW_1,
    SUPER_BLOW_2,
    SUPER_BLOW_3,
    BLOWS_TYPES_TOTAL = 8
};
/////////////////////////////////////////////////////////////////////////////////////////
bool  blow_is_super(T_blow  blow)
{
    return  blow >= SUPER_BLOW_1;
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_blow(T_blow  blow)
{
    std::cout << ( blow_is_super(blow) ? "SUPER_BLOW_" : "BLOW_"         )
              << ( blow + 1 - ( blow_is_super(blow) ? SUPER_BLOW_1 : 0 ) )              
              << std::endl;              
}
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<T_blow>  T_blows;
/////////////////////////////////////////////////////////////////////////////////////////
void  add_blow(T_blows&  blows)
{    
    T_blow  blow         = BLOW_1;
    bool    condition_2  = false;  
    bool    condition_4  = false;  
 
    do
    {
        blow = T_blow( rand() % BLOWS_TYPES_TOTAL );
 
        //Условие 2: удары повторяться не могут.
        condition_2 =    blows.empty()
                      || blow != blows.back(); 
 
        //Условие 4: перед каждым суперударом должно быть как минимум два обычных.
        condition_4 =    !blow_is_super(blow)
                      ||    blows.size() >= 2
                         && !blow_is_super( blows.back() )
                         && !blow_is_super( *(blows.rbegin() + 1) );                     
 
    }while(   !condition_2
           || !condition_4 );
    
    blows.push_back(blow);  
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    srand(static_cast<unsigned>(time(0)));
 
    T_blows       blows;
    const size_t  BLOWS_TOTAL = 30;
    for(int  i = 0; i < BLOWS_TOTAL; ++i)
    {
        add_blow(blows);
    }
    std::cout << "Условия:"
              << std::endl
              << '\t'
              << "- удары не могут повторяться;"
              << std::endl
              << '\t'
              << "- перед каждым суперударом должно быть как минимум 2 обычных."
              << std::endl;
 
    std::for_each(blows.begin(), blows.end(), print_blow);
}
0
0 / 0 / 0
Регистрация: 08.07.2014
Сообщений: 10
27.08.2015, 13:11
Ryu
как можно с Вами связаться?? личка для меня не работает... меня устроит email, skype или icq - оставьте, пожалуйста, в теме один из этих контактов! жду! спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
27.08.2015, 13:11
Помогаю со студенческими работами здесь

Какую структуру данных лучше всего использовать для частого к ней обращения?
Есть большая база данных (просто слова), к ней регулярно выполняются обращения с целью поиска элемента. Так вот, я думаю что лучше всего...

Какую выбрать структуру данных ?
Массив пар &lt;string, unsigned long&gt;. В массиве всегда постоянное число элементов (8), поля string изначально заполнены (уникальными...

Какую структуру хранения данных выбрать?
Подскажите как правильно организовать хранение данных для следующего случая. Предположим есть таблица объявлений(ид, текст объявления,...

Как можно применить уникальный алгоритм эффективного сжатия данных вплоть до белого шума
Есть многопроходной алгоритм, который позволяет эффективно сжимать очень разнородные данные вплоть до белого шума. Каким образом можно...

Какую структуру использовать для сохранения результатов?
Требуется написать программу для расчета механических конструкций, результаты которого будут достаточно объемные, поэтому необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru