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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
abbacca
0 / 0 / 0
Регистрация: 08.02.2014
Сообщений: 14
#1

Задача "тетрис" - C++

09.02.2014, 20:51. Просмотров 345. Ответов 0
Метки нет (Все метки)

Здравствуйте. В общем есть такая задача.

Логические построения Гарри выглядят для него как обычный тетрис, только все падающие объекты-факты ― прямоугольные.
Если нижняя строка полностью заполнена, она исчезает.
Нужно смоделировать ход игры: после каждого падения прямоугольника нужно вывести текущую высоту. Если высота превысит высоту экрана H, то игра завершается.
Падающий прямоугольник заполняет все свободные нижние клетки.
Формат входных данных
В первой строке входного файла записаны целые числа H и W (2 <= h,w <= 100000) ― соответственно, высота и ширина экрана, и количество падающих прямоугольников M (1 <= m <= 100000)
В каждой из последующих M строк даны целые числа Hi, Wi, Xi (1 <= Hi, Wi, Xi <= 100000), представляющие собой, соответственно, высоту и ширину i-го прямоугольника, и координату его левой нижней клетки.
Все прямоугольники падают с самого верха экрана
Формат результата
В выходной файл необходимо для каждого упавшего прямоугольника вывести текущую высоту заполненной части экрана
Если в какой-то момент экран заполнится, то вывести "GAME OVER" (без кавычек) и завершить работу программы.

Вот мой код:
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
#include <fstream>
#include <cmath>
#include <vector>
#include <list>
 
using namespace std;
 
ifstream cin("input.txt");
ofstream cout("output.txt");
 
int main(){
 
        int h, w;
        cin >> h >> w;
 
        int n;
        cin >> n;
 
        vector <int> v;
        v.resize(w, 0);
 
        int x = 0, H, W, X, maxH = 0;
 
        for(int i = 0; i < n; i++){
                cin >> H >> W >> X;
 
                if(X == 1 && W == w){
                        cout << maxH << endl;
                        continue;
                }
 
                if(X+W-1 > w){
                        cout << "GAME OVER";
                        return 0;
                }
 
                for(int j = X-1; j < X+W-1; j++){
                        if(v[j] == 0){
                                x++;
                        }
                        v[j] += H;
                        if(v[j] > maxH){
                                maxH = v[j];
                        }
                }
 
                if(maxH > h){
                        cout << "GAME OVER";
                        return 0;
                }
 
                while(x == w){
                        maxH--;
                        for(int j = 0; j < w; j++){
                                v[j]--;
                                if(v[j] == 0){
                                        x--;
                                }
                        }
                }
                
                cout << maxH << endl;
 
        }
 
 
        return 0;
}
Он не проходит все тесты.
Пожалуйста посмотрите, в чём у меня ошибка. Сколько сидел, так и не смог найти.

 Комментарий модератора 
Размещайте код на форуме, не забывая выделять его соответствующими тегами.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2014, 20:51     Задача "тетрис"
Посмотрите здесь:

Реализовать игровое поле в игре "Тетрис" - C++
Добрый вечер, писал программу тетрис, и ни как не могу исправить некоторые ошибки Что нужно: 1. Нужно поле игровое по центру консоли...

Какую простую графическую библиотеку или класс использовать для разработки игры "Тетрис"? - C++
Я с не давнего времени учу c++.И решил подкрепить знания как на мой взгляд достачно серьёзной программой -Тетрис. Решил написать...

Нужен пример игры "Тетрис" - C++
Ребят, нужна помощь в написании тетриса на С++. Помогите с алгоритмом или поделитесь кодом, желательно использовать библиотеку SFML....

Структуры... Задача: "База сотрудников небольшой фирмы" - C++
По каждому сотруднику вводится следующая информация: • Фамилия, имя, отчество; • год и дата рождения; • пол; • стаж работы по...

Задача "Максимальный подпалиндром" не могу поймать ошибку. - C++
Палиндромом называется строка, которая одинаково читается как слева направо, так и справа налево. Подпалиндромом данной строки называется...

Задача "Гонки по улицам" (обход ориентированного графа) - C++
Здравствуйте,помогите с задачей,если можно с комметарием,чтобы разобраться.Спасибо На рисунке ниже изображен пример плана улиц для гонки....

Задача из книги "Програмирование - принципы и практика использования C++" - C++
Кто читал ету книгу, помогите разобратся с задачей с 12 главы. Никак не могу скомпилировать простую программу. Вот ее код: #include...

Создать класс Account. Задача из книги Дейтелов "Как програмировать на С++" - C++
Начал изучение С++, прочитал главу &quot;Введение в классы и объекты&quot; в книге Дейтелов &quot;Как програмировать на С++&quot;, ничего не поняв прочитал её...

Задача "сумма цифр стоящих на четных позициях", исправьте пожалуйста ошибки - C++
Дано натуральное число n. Найти сумму цифр числа, находящихся на четных позициях (старшая цифра числа находится на первой позиции). ...

задача по С++ "Мастям игральных карт условно присвоены следующие порядковые номера" - C++
Мастям игральных карт условно присвоены следующие порядковые номера:пики-1, трефы-2 , бубны-3, червы-4. Достоинству карт присвоены...

Задача "Дан номер года. Найти число дней в этом году." - C++
Дан номер года. Найти число дней в этом году. Указание. В современном (григорианском) календаре каждый год номер которого делиться на 4,...

Задача со строками (вывести слово, которое содержит ровно три буквы "и") - C++
Здравствуйте, помогите решить задачу. Пользователь вводит предложение с пробелами, запятыми и тп. Нужно вывести слово, которое...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru