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

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

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

Как просчитать шаги от домов до магазина - C++

10.11.2012, 19:45. Просмотров 707. Ответов 5
Метки нет (Все метки)

Готовлюсь к олимпиаде (уже будет 2 декабря) и на тренировочных курсах попалась такая задача :
Не могу понять, как просчитать шаги от домов до магазина. Может надо вычитать индексы массива?
Кто знает, пожалуйста, приведите код.

Задача C. Дома и магазины
На Новом проспекте построили подряд 10 зданий. Каждое здание может быть либо жилым
домом, либо магазином, либо офисным зданием.
Но оказалось, что жителям некоторых домов на Новом проспекте слишком далеко приходится
идти до ближайшего магазина. Для разработки плана развития общественного транспорта на
Новом проспекте мэр города попросил вас выяснить, какое же наибольшее расстояние приходится
преодолевать жителям Нового проспекта, чтобы дойти от своего дома до ближайшего магазина.

Формат входных данных
Программа получает на вход десять чисел, разделенных пробелами. Каждое число задает тип
здания на Новом проспекте: число 1 обозначает жилой дом, число 2 обозначает магазин, число 0
обозначает офисное здание. Гарантируется, что на Новом проспекте есть хотя бы один жилой дом
и хотя бы один магазин.

Формат выходных данных
Выведите одно целое число: наибольшее расстояние от дома до ближайшего к нему магазина.
Расстояние между двумя соседними домами считается равным 1 (то есть если два дома стоят рядом,
то между ними расстояние 1, если между двумя домами есть еще один дом, то расстояние между
ними равно 2 и т.д.)

Пример
ввод - 2 0 1 1 0 1 0 2 1 2
вывод - 3
В примере из условия дальше всего идти до ближайшего магазина жителям четвертого дома:
ближайший к их дому магазин находится в первом доме, и им нужно пройти три дома до него.
Жителям других домов придется пройти меньшее расстояние до ближайшего магазина, поэтому
ответ 3.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.11.2012, 19:45     Как просчитать шаги от домов до магазина
Посмотрите здесь:

C++ Первые шаги в программированнии!
Первые шаги. C++
Первые шаги: есть ли ошибки в программе? C++
C++ Первые шаги: ничего не получается
Вычислить количество домов, которое можно построить на площади s1 C++
C++ Просчитать путь прохождение конем шахматной доски (с использованием эвристики доступности)
C++ Просчитать и записать периметр и площадь для каждого элемента массива
C++ Просчитать количество вариантов представления числа в виде суммы натуральных цифр 1, 2 и 3
C++ Определить количество домов, построенных раньше заданного года
В цикле while просчитать произведение функции и вывести 5 значений C++
C++ Первые шаги в освоении С++
Найти количество и тип домов с наибольшим общим количеством квартир C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.11.2012, 07:20     Как просчитать шаги от домов до магазина #2
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
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int a[10][2], i, j, i_max=-1;
    for(i=0; i<10; i++)
    {
        cin>>a[i][0];
        a[i][1]=20;
    }
    for(i=0; i<10; i++)
        if(a[i][0]==2)
        {
            for(j=0; j<10; j++)
                if(a[j][0]==1 && a[j][1]>abs(i-j))
                    a[j][1]=abs(i-j);
        }
    for(i=0; i<10; i++)
        if(a[i][0]==1)
        {
            if(i_max==-1)
                i_max=i;
            else
                if(a[i][1]>a[i_max][1])
                    i_max=i;
        }
    cout<<a[i_max][1]<<endl;
 
 
    return 0;
}
Kandelyabr
7 / 7 / 0
Регистрация: 03.04.2012
Сообщений: 15
11.11.2012, 18:38     Как просчитать шаги от домов до магазина #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
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
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    int a[10][2], i, j, i_max=-1;
    for(i=0; i<10; i++)
    {
        cin>>a[i][0];
        a[i][1]=20;
    }
    for(i=0; i<10; i++)
        if(a[i][0]==2)
        {
            for(j=0; j<10; j++)
                if(a[j][0]==1 && a[j][1]>abs(i-j))
                    a[j][1]=abs(i-j);
        }
    for(i=0; i<10; i++)
        if(a[i][0]==1)
        {
            if(i_max==-1)
                i_max=i;
            else
                if(a[i][1]>a[i_max][1])
                    i_max=i;
        }
    cout<<a[i_max][1]<<endl;
 
 
    return 0;
}
Программа составлена верно лишь в том случае, если на массиве из 10 домов 1 магазин, а в условии сказано, что хотя бы 1 магазин, соответственно при числе магазинов от одного и выше правильный результат будет выводиться для одного, последнего магазина в массиве.

Добавлено через 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
#include <iostream>
using namespace std;
 
int k=0, l=0, a = 10;
 
int length(int *buf1, int *buf2) {
    int n[k], m;
    for(int i=0; i<k; i++) {
        n[i] = a;
        for(int j=0; j<l; j++) {
            if(buf1[i] > buf2[j]) m = buf1[i] - buf2[j];
            else
                m = buf2[j] - buf1[i];
            if(m < n[i]) n[i] = m;
        }
    }
    m = 0;
    for(int i=0; i<k; i++) {
        if(n[i] > m) m = n[i];
    }
    return m;
}
 
int main()
{
    int a = 10, town[a], buf1[a - 1], buf2[a - 1];
    for(int i=0; i<a; i++) {
        cin >> town[i];
        if(town[i]==1) {buf1[k] = i; ++k;}
        if(town[i]==2) {buf2[l] = i; ++l;}
    }
    if(k<1) {
        cout << "Error. Number of houses k = " << k << " >= 1.\n";
        return 1;
    }
    if(l<1) {
        cout << "Error. Number of markets l = " << l << " >= 1.\n";
        return 1;
    }
    cout << length(buf1, buf2);
    return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4661 / 2487 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
11.11.2012, 19:00     Как просчитать шаги от домов до магазина #4
Цитата Сообщение от Kandelyabr Посмотреть сообщение
Программа составлена верно лишь в том случае, если на массиве из 10 домов 1 магазин, а в условии сказано, что хотя бы 1 магазин, соответственно при числе магазинов от одного и выше правильный результат будет выводиться для одного, последнего магазина в массиве.
тут Вы неправы, результат учитывает абсолютно все имеющиеся магазины.
Kandelyabr
7 / 7 / 0
Регистрация: 03.04.2012
Сообщений: 15
11.11.2012, 19:41     Как просчитать шаги от домов до магазина #5
Прошу извинить, увидел, где ошибся с анализом, недопонял логику.
лыс
1 / 1 / 0
Регистрация: 04.11.2012
Сообщений: 50
11.11.2012, 20:06  [ТС]     Как просчитать шаги от домов до магазина #6
Запустил на проверку обе программы и обе прошли все 7 тестов из 7. Спасибо, разбираюсь с Вашими алгоритмами.
Yandex
Объявления
11.11.2012, 20:06     Как просчитать шаги от домов до магазина
Ответ Создать тему
Опции темы

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