Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.06.2014, 18:16   #1
Sombre Sky
Новичок
Джуниор
 
Регистрация: 09.06.2014
Сообщений: 2
По умолчанию Обработка последовательно вводимых чисел, без использования массива на Си

Доброго времени суток! Буду очень благодарен за ваш совет в решении данной задачи:

На вход программе в первой строке подаётся количество чисел N (4<N<10000). В каждой из последующих N строк подается одно целое положительное число, не превышающее 1000.Требуется найти минимальную сумму двух чисел из этой последовательности, отстоящих друг от друга не менее чем на 4 строки.
Данные в массив загонять нельзя, т.е. надо уложиться в один проход.

Я сначала думал найти 5 наименьших чисел (тогда как минимум 2 из них удовлетворяют удаленности на 4), и среди них уже тупо перебором искать сумму. Но этот метод работает только если все числа разные(

Так вот, подскажите пожалуйста алгоритм действий. Код необязателен, хотя предполагается что задача будет выполнена на С. Я пока в тупике)
Sombre Sky вне форума Ответить с цитированием
Старый 09.06.2014, 19:17   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,322
По умолчанию

Код:
#include <stdio.h>

const int step = 5;

int main(void) {
    int a[step], n, k = 0, i;
    scanf("%d", &n);
    for (i = 0; i < step; ++i)
        scanf("%d", &a[i]);
    int sum = a[0] + a[step - 1], min = a[0];
    n -= step;
    for (i = 0; i < n; ++i) {
        scanf("%d", &a[k]);
        k = (k + 1) % step;
        if (a[k] < min)
            min = a[k];
        int tmp = min + a[(k + step - 1) % step];
        if (tmp < sum)
            sum = tmp;
    }
    printf("%d", sum);
    return 0;
}
Но это моё предположение.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 09.06.2014, 20:28   #3
Sombre Sky
Новичок
Джуниор
 
Регистрация: 09.06.2014
Сообщений: 2
По умолчанию

Я тут успел нагородить некий аналог, но ваш код раза в 2 компактней и проще. Спасибо за ответ! И за урок краткости

Вопрос снят.
Sombre Sky вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввести массив чисел и некоторое число. Без использования другого массива переставить элементы в этом массиве (язык C) sen95 Помощь студентам 3 16.05.2014 23:06
Генератор псевдослучайных чисел без использования встроеных функций lordik333 C# (си шарп) 1 03.12.2012 20:18
Функция без использования массива TAHK56 Visual C++ 1 04.06.2012 14:55
Сравнение чисел без использования оператора if rapprozi Помощь студентам 11 10.05.2012 18:59
Палиндром без использования массива Pingvinenok_Lolo Помощь студентам 17 13.11.2011 02:27