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

[Матрица] Круг или квадрат? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Visual C++ & Hello world http://www.cyberforum.ru/cpp-beginners/thread337362.html
Вот поставил Visual C++ 2005 Пишу: #include "stdafx.h" #include <iostream.h> int _tmain(int argc, _TCHAR* argv) {
C++ Почему тормозит играаа??? Добрый день - решил недавно создать игрушку (третяя на моем счету)... но на этот раз игра не пошаговая - эдакое подобие бомбермена с инвентарем... Можете пожалуйста подсказать по какой причине игра может тормозить ? (Возможно проблема в алгоритме - основная часть которого в мейн функции(это цикл)- пожалуйста обратите внимание) Администрацию сайта просьба не переносить даное сообщение в... http://www.cyberforum.ru/cpp-beginners/thread337343.html
C++ простые функции
Всем приветик!!! Есть код: #include<iostream.h> #include<conio.h> #include<string.h> enum Shape{prizm,parallelepiped,cube,pyramid,cone,cylinder}; class Body {
C++ Построить эйлерову цепь в графе.
Всем доброго времени суток! Помогите пожалуйста или подскажите как сделать следующее. Дали задание по дискретной математике построить эйлерову цепь в графе (нужно реализовать все программе, но вот не знаю с чего начать). Задание следующее: Построить эйлерову цепь в графе. Изменить алгоритм построения эйлерова цикла так, чтобы можно было использовать его для построения эйлеровой цепи в графе....
C++ MinGW запрет неявного преобразования типов http://www.cyberforum.ru/cpp-beginners/thread337306.html
Существует ли какой то режим у gcc (MinGW) где бы компилятор "ругался" или хотя бы предупреждал о неявном преобразование типов? Причем не важно: int -> double или double -> int
C++ Помогите написать программку - лотерею Я сам только окончил первый курс технаря...учусь отлично...решил, что пока каникулы, заняться изучением C++......как-то он меня увлек....вчера в голову пришла идея, написать программку - лотерею...типа вводишь несколько чисел подряд, программка их перебирает и выводит какое-то число на экран.... P.s. программка легкая, но я повторюсь, что я занимаюсь самостоятельным изучением.....помогите... подробнее

Показать сообщение отдельно
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.07.2011, 18:38  [ТС]     [Матрица] Круг или квадрат?
Был немного занят...
Попробовал реализовать оба варианта, оба не получилось >_>
Допустим, будет такой тест:
***
*.*
***
Т.к. проверка на дырки не идет по последним двум сторонам, то оба алгоритма считают это квадратом. Собственно, про это и был мой вопрос...
Более коротким кстати оказался вариант от grizlik78, только я немного по другому к нему подошел. Зачем строить кучу квадратов, если интересует только один, одна из вершин которого находиться в правом нижнем углу? Поэтому я строю только один квадрат, одна вершина которого находиться в одной из 9 точек, другая - правый нижний угол предполагаемого квадрата. Если его возможно построить, то смотрю, есть ли в нем дырки, иначе перехожу к следующей точке. Но он получает Wrong Answer на 6 тесте. Да и как он будет работать с вышеприведенным примером я не представляю...
Собственно, код:
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
#include <iostream>
#include <cstdlib> //for abs
int main(){
    //freopen("input.txt", "r", stdin);
    //freopen("output.txt", "w", stdout);
    int n, m;
    std::cin >> n >> m;
    if (n < 3 || m < 3){
        std::cout << "CIRCLE";
        return 0;
    }
    char **matrix = new char* [n];
    for (int i = 0; i < n; ++i)
        matrix[i] = new char [m];
    
    int x1 = n, x2 = -1, y1 = -1, y2 = -1;
    for (int i = 0; i < n; ++i)
        for (int j = 0; j < m; ++j){
            std::cin >> matrix[i][j];
            if (matrix[i][j] == '*'){
                if (y1 == -1)
                    y1 = i;
                else
                    y2 = i;
            if (j < x1)
                x1 = j;
            if (j > x2)
                x2 = j;
            }
        }
    
    
    for (int i = y1; i < y1 + 3; ++i)
        for (int j = x1; j < x1 + 3; ++j){
            bool have_whole_cell = false;
            if (abs(i - j) != abs(x2 - y2)) //отсечение неквадратов
                continue;
            for (int x = j; x < x2 - 1; ++x)
                for (int y = i; y < y2 - 1; ++y)
                    if (matrix[y][x] == '.')
                        have_whole_cell = true;
            if (!have_whole_cell){
                std::cout << "SQUARE\n";
                goto del;
            }
        }
    std::cout << "CIRCLE\n";                
    del:
    for (int i = 0; i < n; ++i)
        delete[] matrix[i];
    delete[] matrix;
    
    return 0;
}
 
Текущее время: 23:08. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru