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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2016, 15:54   #1
evgenybal
 
Регистрация: 09.04.2015
Сообщений: 9
По умолчанию Задача на Си

Условие:
В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться.

Напишите программу, которая по данной ситуации определяет, сколько шариков будет сейчас "уничтожено". Естественно, непрерывных цепочек из трех и более одноцветных шаров в начальный момент может быть не более одной.

Входные данные
Сначала вводится количество шариков в цепочке (не более 1000) и цвета шариков (от 0 до 9, каждому цвету соответствует свое целое число).

Выходные данные
Требуется вывести количество шариков, которое будет "уничтожено".

Примеры
входные данные
5 1 3 3 3 2
выходные данные
3

Мой код:
Код:
#include <stdio.h>
 
int main()
{
    int i, max, n, count = 2, h;
    scanf("%i", &n);
    int x[1000];
    for (i = 0; i < n; i++) //выводим массив
    {
        scanf("%i", &h);//проверка вводимых данных(шары должны быть от 0 до 9)
        if (h >= 0 && h <= 9) x[i] = h;
        else i--;
 
    }
    //проверка на 3 шара рядом
    if (n > 3)
    {
        for (i = 1; i <= n - 2; i++)
        {
            if (x[i] == x[i + 1] && x[i] == x[i - 1]) count++;
        }
    }
    else
    {
        printf("0");
        return 0;
    }
    printf("%i ", count);
    return 0;
 
 
}
Задачка взята с сайта, с поддержкой автоматической проверки кода путем серии тестов. Часть тестов программа не прошла. Вопрос: в чем может быть причина

Последний раз редактировалось evgenybal; 14.03.2016 в 16:13.
evgenybal вне форума Ответить с цитированием
Старый 14.03.2016, 16:08   #2
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Цитата:
Сообщение от evgenybal Посмотреть сообщение
Условие:
В одной компьютерной игре игрок выставляет в линию шарики разных цветов. Когда образуется непрерывная цепочка из трех и более шариков одного цвета, она удаляется из линии. Все шарики при этом сдвигаются друг к другу, и ситуация может повториться.
Не увидел реализации этой части программы.

А если не секрет, можете дать ссылку на данный сайт?
max_prorok вне форума Ответить с цитированием
Старый 14.03.2016, 16:14   #3
evgenybal
 
Регистрация: 09.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от max_prorok Посмотреть сообщение
Не увидел реализации этой части программы.

А если не секрет, можете дать ссылку на данный сайт?
Реализация данной части программы не нужно. Это просто описание. Сайт, я думаю, достаточно известный http://informatics.mccme.ru
evgenybal вне форума Ответить с цитированием
Старый 14.03.2016, 16:20   #4
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

А есть ли названия у этих тестов? Как-то возможно понять, в каком направлении двигаться?
max_prorok вне форума Ответить с цитированием
Старый 14.03.2016, 16:26   #5
evgenybal
 
Регистрация: 09.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от max_prorok Посмотреть сообщение
А есть ли названия у этих тестов? Как-то возможно понять, в каком направлении двигаться?
нет. можно просто посмотреть сколько тестов прошла программа. На данный момент 28 из 39
evgenybal вне форума Ответить с цитированием
Старый 14.03.2016, 16:29   #6
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

И все-таки мне кажется, что должен быть обработан вариант нескольких "убийств" шариков, т.е. рассмотрим такую цепочку: 2 5 3 9 9 9 3 3. В данной цепочке сначала уйдут девятки, а следом тройки. Соответственно уйдет 6 шаров. Вполне возможно, что хотя бы +1 тест будет выполнен.
max_prorok вне форума Ответить с цитированием
Старый 14.03.2016, 16:38   #7
evgenybal
 
Регистрация: 09.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от max_prorok Посмотреть сообщение
И все-таки мне кажется, что должен быть обработан вариант нескольких "убийств" шариков, т.е. рассмотрим такую цепочку: 2 5 3 9 9 9 3 3. В данной цепочке сначала уйдут девятки, а следом тройки. Соответственно уйдет 6 шаров. Вполне возможно, что хотя бы +1 тест будет выполнен.
хмм, а это идея. хотя в данной задачке даже не нужно выводить массив без уничтоженных шаров. Просто их количество. Дело в том, чтобы просчитать такой исход, нужен далее вывести массив с уничтоженными шарами, а это так и так выходит за пределы задачи
evgenybal вне форума Ответить с цитированием
Старый 14.03.2016, 16:43   #8
max_prorok
Форумчанин
 
Регистрация: 06.10.2011
Сообщений: 181
По умолчанию

Не надо выводить массив уничтоженных шаров. Просто, в случае уничтожения шаров, тебе надо надо будет сдвигать конец массива на количество уничтоженных шаров на место первого уничтоженного шара. Затем, опять проверять, есть ли 3 подряд одинаковых. Если есть, повторяешь процедуру.
max_prorok вне форума Ответить с цитированием
Старый 14.03.2016, 16:45   #9
evgenybal
 
Регистрация: 09.04.2015
Сообщений: 9
По умолчанию

Цитата:
Сообщение от max_prorok Посмотреть сообщение
Не надо выводить массив уничтоженных шаров. Просто, в случае уничтожения шаров, тебе надо надо будет сдвигать конец массива на количество уничтоженных шаров на место первого уничтоженного шара. Затем, опять проверять, есть ли 3 подряд одинаковых. Если есть, повторяешь процедуру.
и правда, спасибо за подсказку)
evgenybal вне форума Ответить с цитированием
Старый 14.03.2016, 17:03   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

кстати, я бы программу сразу проверил на граничные ситуации.
посмотрите, правильно ли ваша программа разберёт такие исходные данные
2 2 2 2 2

1 2 2 2 2 2

2 2 2 2 2 1

1 2 1 1 2 2 2 1 2 2 1 1
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача по подсчёту статистики использования букв. Другая задача - по длинной арифметике Pascal ABC kimberly Паскаль, Turbo Pascal, PascalABC.NET 3 24.12.2012 17:03
задача на структуру(struct)/задача на работу с файлом SevenArth Помощь студентам 0 26.04.2012 19:06
Задача на оптимальный расчет маршрута (задача в презентации) в табличном процессоре Excel Toofed Помощь студентам 0 30.11.2011 01:12
Задача минимизации дисбаланса на линии сборки (задача минимакса) LenZab Microsoft Office Excel 13 13.03.2011 22:51