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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
#1

Задание с олимпиады. Массивы - C++

14.02.2011, 23:59. Просмотров 1591. Ответов 27
Метки нет (Все метки)

условие в прикрепленнов файле.

я не смог ее решить. однако очень интересно и хотелосб ьы узнать как и что.
0
Вложения
Тип файла: doc Озёра.doc (28.0 Кб, 85 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.02.2011, 23:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задание с олимпиады. Массивы (C++):

Массивы(задание) Заполнение массива по правилу. - C++
1. Дано число n. Создайте целочисленный массив A, и заполните его по следующему правилу: - числа на диагонали, идущей из правого...

задание на массивы и бесконеч.сумму ряда. - C++
Прошу о помощи уважаемые форумчане.Столкнулась с проблемой в написании программ: 1)Дана последовательность и n действительных чисел.Найти...

C++ | Правильно ли я сделал задание | Массивы | Указатели и Ссылки - C++
Вообще прога должна показывать самое большое число по модулю, что она и делает, но меня интересует другой вопрос, правильно ли я...

Задачи с олимпиады - C++
Помогите разобраться с данными задачами с олимпиады: 1. Вводиться 3 остатка от деления числа на 971, 997 и 1033. Вывести это число. ...

Он-лайн олимпиады по программированию - C++
Подскажите, если кто знает, пожалуйста, он-лайн олимпиады по программированию. Прочитал книжки, поделал задачки и примеры, хочется теперь...

сложная задача с олимпиады по программированию - C++
Перевозчику необходимо доставить груз из одного города (А) в другое (В). Известно, что при доставке груза перевозчик несет затраты...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Naatikin
4 / 4 / 0
Регистрация: 01.11.2010
Сообщений: 97
15.02.2011, 07:58 #2
А почему в задании ответ только 2 озера?

Добавлено через 1 минуту
а понял "к" - количество различных озёр, не имеющих общие стены
0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
15.02.2011, 10:50 #3
Да, мне тоже показалось, что ответ должен быть 1, или я задания не понял(

Добавлено через 2 минуты
или "сторона" по диогонали не считается? Тогда 2.
0
.::.DIMA.::.
143 / 143 / 4
Регистрация: 26.10.2008
Сообщений: 782
15.02.2011, 13:30 #4
Когда-то решал похожую задачу. Делается через циклическую очередь.
0
no0ker
15.02.2011, 15:19
  #5

Не по теме:

случайно нет тестов для нее?

0
Kastaneda
Форумчанин
Эксперт С++
4653 / 2862 / 228
Регистрация: 12.12.2009
Сообщений: 7,271
Записей в блоге: 2
Завершенные тесты: 1
15.02.2011, 16:25 #6
no0ker, а какие тут тесты? Руками забил в файл матрицу, и тестируй)
0
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
15.02.2011, 18:13  [ТС] #7
Цитата Сообщение от Naatikin Посмотреть сообщение
А почему в задании ответ только 2 озера?

Добавлено через 1 минуту
а понял "к" - количество различных озёр, не имеющих общие стены
по диагонали могут касаться. а на счет К ты понял. 0-земля 1-вода. если 1(вода) обрамлена 0(землей) то это озеро
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
15.02.2011, 19:12 #8
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
void go_next(int x, int y, int**in, int**out,int size_x,int size_y){
    out[x][y]=0;
    if ( x<size_x-1 && out[x+1][y]==1 && in[x+1][y]==1)
        go_next(x+1,y,in,out,size_x,size_y);
 
    if ( x>=1 && out[x-1][y]==1 && in[x-1][y]==1)
        go_next(x-1,y,in,out,size_x,size_y);
 
    if ( y<size_y-1 && out[x][y+1]==1 && in[x][y+1]==1)
        go_next(x,y+1,in,out,size_x,size_y);
 
    if ( y>=1 && out[x][y-1]==1 && in[x][y-1]==1)
        go_next(x,y-1,in,out,size_x,size_y);
}
 
 
int main()
{
 
    int i,j;
    int size_x, size_y;
    int result=0;
 
    //
    ifstream a;
    a.open("in.txt");
    a>>size_x;
    a>>size_y;
    //
 
 
 
    int **in;
    in = new int*[size_x];
    for (i=0;i<size_x;++i) in[i]=new int[size_y];
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j) a >> in[i][j];
    }
 
 
 
    int **out;
    out = new int*[size_x];
    for (i=0;i<size_x;++i) out[i]=new int[size_y];
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j) out[i][j]=1;
    }
 
 
 
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j){
            if (in[i][j]==1 && out[i][j]==1){
                go_next(i,j,in,out,size_x,size_y);
                ++result;
            }
        }
    }
 
    cout << result;
 
 
    for(i=0;i<size_x;++i){
            delete[] in[i];
            in[i]=NULL;
            delete[] out [i];
            out[i]=NULL;
    }
    delete[] in;
    in=NULL;
    delete[] out;
    out=NULL;
 
    return 0;
}
Добавлено через 19 секунд
использовал рекурсию
0
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
15.02.2011, 19:17  [ТС] #9
хм ща попробуем что тут...я уже устал ломать голову.

Добавлено через 3 минуты
no0ker, при запуске - быстро закрывается попробовал system pause. компиль ошибку дает.
а через cmd кинул говорит что нужен Runtime. ща процитирую:
The application has requested th RUNTIME to terminate
0
Mayonez
380 / 272 / 21
Регистрация: 26.12.2009
Сообщений: 875
15.02.2011, 19:20 #10
Цитата Сообщение от instagib Посмотреть сообщение
The application has requested th RUNTIME to terminate
памяти много требует
0
no0ker
101 / 88 / 4
Регистрация: 17.12.2010
Сообщений: 416
15.02.2011, 19:22 #11

Не по теме:

да уж...памяти требует многовато. рекурсия как никак.... =(



Добавлено через 1 минуту
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
#include <iostream>
#include <fstream>
 
using namespace std;
 
int size_x, size_y;
int** in, ** out;
 
void go_next(int x, int y){
    extern int size_x, size_y;
    extern int ** in, **out;
 
    out[x][y]=0;
    if ( x<size_x-1 && out[x+1][y]==1 && in[x+1][y]==1)
        go_next(x+1,y);
 
    if ( x>=1 && out[x-1][y]==1 && in[x-1][y]==1)
        go_next(x-1,y);
 
    if ( y<size_y-1 && out[x][y+1]==1 && in[x][y+1]==1)
        go_next(x,y+1);
 
    if ( y>=1 && out[x][y-1]==1 && in[x][y-1]==1)
        go_next(x,y-1);
}
 
 
int main()
{
 
    int i,j;
    extern int size_x, size_y;
    extern int **in, **out;
 
    int result=0;
 
    ifstream a;
    a.open("in.txt");
    a>>size_x;
    a>>size_y;
 
 
    in = new int*[size_x];
    for (i=0;i<size_x;++i) in[i]=new int[size_y];
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j) a >> in[i][j];
    }
 
    out = new int*[size_x];
    for (i=0;i<size_x;++i) out[i]=new int[size_y];
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j) out[i][j]=1;
    }
 
    for(i=0;i<size_x;++i){
        for(j=0;j<size_y;++j){
            if (in[i][j]==1 && out[i][j]==1){
                go_next(i,j);
                ++result;
            }
        }
    }
 
    cout << result;
 
    for(i=0;i<size_x;++i){
            delete[] in[i];
            in[i]=NULL;
            delete[] out [i];
            out[i]=NULL;
    }
 
    delete[] in;
    in=NULL;
    delete[] out;
    out=NULL;
 
    return 0;
}
а вот так?
1
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
15.02.2011, 19:24  [ТС] #12
Цитата Сообщение от Mayonez Посмотреть сообщение
памяти много требует
какой еще памяти лол.
если назову конфигурацию компа поменяешь мнение.
0
ForEveR
В астрале
Эксперт С++
7972 / 4734 / 321
Регистрация: 24.06.2010
Сообщений: 10,541
Завершенные тесты: 3
15.02.2011, 19:24 #13
instagib, Стек все равно не резиновый. Это так, если что. Ну и память которая используется не резиновая.
0
instagib
122 / 85 / 3
Регистрация: 14.02.2011
Сообщений: 340
15.02.2011, 19:25  [ТС] #14
no0ker, гениально! спасибо большое. работает отлично!
0
no0ker
15.02.2011, 19:28     Задание с олимпиады. Массивы
  #15

Не по теме:

не знаю как у вас но у меня 20 на 20 проглатывает... причем быстро... 0,016 сек

1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.02.2011, 19:28
Привет! Вот еще темы с ответами:

Определить среднее количество участников олимпиады из одной школы - C++
На вход программе подаются сведения о номерах школ учащихся, участвовавших в олимпиаде. В первой строке сообщается количество учащихся N....

Отобрать кандадатов на олимпиады (с отличными оценками) по каждому из предметов - C++
Для группы учащихся известны годовые оценки по следующим предметам:математика,физика,химия, информатика. Отобрать кандадатов на олимпиады(с...

Найти, из какой школы (школ) было больше всего участников олимпиады - C++
Прошу помощи. Болел - ничего не понял. Скоро экзамен, а я ничего не понимаю в С++. Дали примерные задачи, а я не понимаю как решать. Вот...

Разбор задач второго этапа Республиканской олимпиады по информатике, 9-11 классы,РК I-II туры - C++
Здравствуйте. На днях(8-9 декабря) прошел районный этап Республиканской олимпиады по информатике в Казахстане. Всего в этапе было два тура....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
15.02.2011, 19:28
Ответ Создать тему
Опции темы

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