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

Найти отравленную часть пирога - C++

Восстановить пароль Регистрация
 
Jim
0 / 0 / 0
Регистрация: 04.05.2014
Сообщений: 57
06.06.2014, 12:22     Найти отравленную часть пирога #1
1)Имеется прямоугольный пирог, разрезанный на n×m частей (клеток),
причем, левая нижняя клетка пирога отравлена.
Игроки по очереди выбирают
какую-нибудь клетку пирога и «съедают» ее вместе со всеми клетками,

расположенными правее и выше выбранной. Проигрывает тот,
кто съедает отравленную клетку.
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
#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{   system("chcp 1251>0");
    int n,m,i,j,p=1,x,y;   // Объявление переменных
    cout<<"Введите размерность пирога:"<<endl;
    cin>>n>>m; // Ввод размерности пирога
    int **a=new int*[n];
    for (i=0;i<n;i++)  // Выделение памяти под двумерный массив
        a[i]=new int[m];
    for (i=0;i<n;i++)
        for (j=0;j<m;j++)
            a[i][j]=1;   // приравнивание всех элементов массива к единицам
    a[n-1][0]=-1;  // инициализация ядовитого куска
    while(true) // бесконечный цикл
    {   cout<<endl<<"Ход игрока "<<p<<endl; // р - номер игрока
    for (i=0;i<n;i++)
    {   cout<<endl;
        for (j=0;j<m;j++)
            cout<<a[i][j]<<" ";    // вывод матрицы
    }
        cout<<endl<<"Выберите кусок: "<<endl;
        cin>>i>>j;  // выбор кусочка
        if (i>n || j>m || i<=0 || j<=0)    // проверка правильности выбора
        {   cout<<"Выход за пределы!"<<endl;
            system("pause");
        }
        else           // если выбор допустим, выполняются действия
        {   x=i-1;
            y=j-1;
            if (a[x][y]==0)     // если кусочек уже съеден
            {   cout<<"Куска уже нет!"<<endl;
                system("pause");
            }
            if (a[x][y]==1)  // если кусочек не съеден и не ядовитый
            {   for(i=0;i<x;i++)
                    a[i][y]=0;
                for(j=y;j<m;j++)   // съедение остальных кусочков
                    a[x][j]=0;
                if (p==1) p=2;   // проверка номера игрока и смена
                else p=1;
            }
            if (a[x][y]==-1) break; // съедение ядовитого куска и выход из цикла
        }}
    cout<<endl<<"Игрок " <<p<<" Отравлен!Печаль=((("<<endl;
    system("pause");
    return 0;
Здесь проблема в том, что съедаются не все клетки, а только линия сверху и линия справа, хотя нужно, чтобы там все клетки правее и сверху были съедены. Не знаю как исправить.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.06.2014, 12:22     Найти отравленную часть пирога
Посмотрите здесь:

Ошибка в задаче: Найти мин. k, которое будет удовлетворять условию: fabs(правая часть - левая часть) < 10^(-15) C++
C++ Найти целую часть суммы чисел
Для каждого числа найти корень квадратный, если дробная часть меньше 5, в противном случае найти квадрат данного числа C++
Матрица. Найти закрашенную часть C++
GCC как часть библиотек линковать статически, а часть динамически? C++
Есть пирог. Игроки по очереди выбирают какую-либо клетку пирога. Определить проигравшего C++
C++ Есть ли возможность в char-массив часть данных ввести в буквах, а часть в цифрах?
Разделить дробное число на 2 части: целая часть числа и его дробная часть C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

Текущее время: 00:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru