Форум программистов, компьютерный форум CyberForum.ru

Миссионеры и людоеды - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Алгоритм определения наличия текста в файле. http://www.cyberforum.ru/cpp-beginners/thread350543.html
Всем доброго времени суток. Собственно вопрос в теме. Есть произвольный бинарный файл, содержит набор спецсимволов типа %:?*№ и т.д. и текст "Привет, это тест!" Подскажите где копать, по поводу алгоритма определения текста в файле. Т.е. моя задача написать функцию, которая вернет мне 1, если файл, помимо спецсимволов содержит текст. Можно тупо загнать все символы в исключение и сканировать,...
C++ Прошу помощи по коду (нужен алгоритм) Условие задачи: Дано 36-ричное число, содержащее не более 100 цифр (цифры 10,11,...,35 кодируются заглавными латинскими буквами А,В,...,Z). Переставить цифры числа таким образом, чтобы оно стало "счастливым". "Счастливым" будем называть число из N цифр, у которого сумма первых цифр равна сумме последних цифр. Если такая перестановка невозможна, вывести сообщение "impossible" Код программы:... http://www.cyberforum.ru/cpp-beginners/thread350528.html
C++ сортировка пузырьком
#include <iostream> using namespace std; void main() { const n=4; int a,i,j,buffer; for(i=0;i<n;i++) cin>>a; for (i=0; i<n-1; i++)
Вычислить функцию C++
Дано действительное число а, Вычислить f (a), если 0 при x<= 0 x2+x при 0<x<=1 x2-sinлx2 в остальных случаях;
C++ вычислять площадь http://www.cyberforum.ru/cpp-beginners/thread350495.html
Напишите программу, которая будет вычислять площадь поверхности данного прямоугольного параллелепипеда (ширина, высота и длина будет вводится с клавиатуры).
C++ четное нечетно написать программу. если число четное и делиться на 10 то выводить слова yes подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
 Аватар для Mr.X
2807 / 1583 / 248
Регистрация: 03.05.2010
Сообщений: 3,686
13.09.2011, 09:22     Миссионеры и людоеды
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
/////////////////////////////////////////////////////////////////////////////////////////
// Миссионеры и людоеды.
// Три миссионера и три людоеда находятся по одну сторону реки, через которую они хотят 
// переправиться. В их распоряжении имеется лодка, которая может выдержать вес только 
// двух человек. Кроме того, если в какой-то момент число людоедов станет больше числа 
// миссионеров, миссионеры будут съедены независимо от того, на каком берегу реки это 
// случится.
// Нужно решить задачу рекурсивным методом
/////////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <iostream>
#include <vector>
/////////////////////////////////////////////////////////////////////////////////////////
struct T_missionaries_and_cannibals_state
{
    //-----------------------------------------------------------------------------------
    struct  T_go_arg
    {
        bool  forward_;
        int   missionaries_;
        int   cannibals_; 
        //-------------------------------------------------------------------------------
        T_go_arg
            (
                bool  forward,
                int   missionaries,
                int   cannibals
            )
            : forward_       (forward),
              missionaries_  (missionaries),
              cannibals_     (cannibals)
        {}
    };
    //-----------------------------------------------------------------------------------
    typedef std::vector<T_go_arg>  T_go_args;
    //-----------------------------------------------------------------------------------
    int   missionaries_here_;
    int   cannibals_here_;
    int   missionaries_there_;
    int   cannibals_there_;
    bool  boat_is_here_;    
    //-----------------------------------------------------------------------------------
    T_missionaries_and_cannibals_state
        (
            int   missionaries_here,
            int   cannibals_here,
            int   missionaries_there,
            int   cannibals_there,
            bool  boat_is_here
        )
        : missionaries_here_   (missionaries_here),
          cannibals_here_      (cannibals_here),
          missionaries_there_  (missionaries_there),
          cannibals_there_     (cannibals_there),
          boat_is_here_        (boat_is_here)
    {}
    //-----------------------------------------------------------------------------------
    bool  operator== (const T_missionaries_and_cannibals_state&  state) const
    {
        return    cannibals_here_      == state.cannibals_here_
               && cannibals_there_     == state.cannibals_there_
               && missionaries_here_   == state.missionaries_here_
               && missionaries_there_  == state.missionaries_there_
               && boat_is_here_        == state.boat_is_here_;
    }
    //-----------------------------------------------------------------------------------
    operator bool() const
    {
        return    cannibals_here_       >= 0               
               && cannibals_there_      >= 0
               && (missionaries_here_   == 0 || missionaries_here_   >= cannibals_here_ )
               && (missionaries_there_  == 0 || missionaries_there_  >= cannibals_there_);
    }
    //-----------------------------------------------------------------------------------
    bool  go(const T_go_arg&  go_arg)
    {
        int  missionaries  = go_arg.missionaries_;
        int  cannibals     = go_arg.cannibals_;
        if(go_arg.forward_)
        { 
            if(!boat_is_here_) return  false;    
        }
        else
        {
            if(boat_is_here_) return  false;
            missionaries  *= -1;
            cannibals     *= -1;
        }
        boat_is_here_        = !boat_is_here_;
        missionaries_here_   -= missionaries;
        missionaries_there_  += missionaries;
 
        cannibals_here_      -= cannibals;
        cannibals_there_     += cannibals;
        return  *this;
    }
    //-----------------------------------------------------------------------------------    
};
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::vector<T_missionaries_and_cannibals_state>  T_history;
/////////////////////////////////////////////////////////////////////////////////////////
void  go_missionaries_and_cannibals
    (
        T_history                                             history,
        const T_missionaries_and_cannibals_state&             finish_state,
        const T_missionaries_and_cannibals_state::T_go_args&  go_args
    )
{
    if(history.back() == finish_state)
    {
        std::cout << "м.зд"
                  << "\t"
                  << "л.зд"
                  << "\t"
                  << "м.там"
                  << "\t"
                  << "л.там"
                  << std::endl;
                  
        for(T_history::const_iterator  state_it = history.begin();
            state_it != history.end(); ++state_it)
        {
            std::cout << state_it->missionaries_here_
                      << "\t"
                      << state_it->cannibals_here_
                      << "\t"
                      << state_it->missionaries_there_
                      << "\t"
                      << state_it->cannibals_there_
                      << std::endl
                      << std::endl;
        }
        return;
    }
            
    if(
        history.size() > 1
        &&
        std::find
            (
                history.rbegin() + 1,
                history.rend(),
                history.back()
            ) 
            != history.rend()
      )
    {
        return;
    }
 
    for(T_missionaries_and_cannibals_state::T_go_args::const_iterator  arg_it = go_args.begin();
        arg_it != go_args.end(); ++arg_it)
    {
        T_missionaries_and_cannibals_state  next_state = history.back();
        if( !next_state.go(*arg_it) ) continue;
        T_history  new_history = history;    
        new_history.push_back(next_state);
        go_missionaries_and_cannibals
            (
                new_history, 
                finish_state, 
                go_args
            );    
    }
}
/////////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    T_missionaries_and_cannibals_state::T_go_args  go_args;
    for(int  forward = 0; forward <= 1; ++forward)
    {
        for(int  missionaries = 0; missionaries <= 2; ++missionaries)
        {
            for(int  cannibals = 0; cannibals <= 2; ++cannibals)
            {
                int  sum = missionaries + cannibals;
                if(   sum < 1
                   || sum > 2 )
                {
                    continue;
                }
                go_args.push_back
                    ( 
                        T_missionaries_and_cannibals_state::T_go_arg
                            (
                                forward == 0, 
                                missionaries, 
                                cannibals
                            ) 
                    );
            }
        }
    }
 
    T_missionaries_and_cannibals_state  start_state   (3, 3, 0, 0, true  );
    T_missionaries_and_cannibals_state  finish_state  (0, 0, 3, 3, false );
    T_history                           history       (1, start_state);
    go_missionaries_and_cannibals
        (
            history, 
            finish_state, 
            go_args
        );    
}
 
Текущее время: 02:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru