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

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

Войти
Регистрация
Восстановить пароль
 
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
#1

Задача с тимуса №1881 - C++

04.07.2014, 15:49. Просмотров 481. Ответов 5
Метки нет (Все метки)

http://acm.timus.ru/problem.aspx?space=1&num=1881
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
#include <iostream>
using std::cin;
using std::cout;
 
int main()
{
    int strok, simvolov, slov,
        tekStroka = 1, vTekStroke = 0; // номер текущей строки и кол-во символов в текущей строке
    char tekSlovo[101];
    cin >> strok >> simvolov >> slov;
 
    for (int i = 0; i < slov; i++)
    {
        cin.getline(tekSlovo,101);
        if (vTekStroke + strlen(tekSlovo) + (vTekStroke > 0? 1 : 0) <= simvolov)
            // если в строке уже есть слова, надо добавить 1 пробел
            vTekStroke += strlen(tekSlovo) + (vTekStroke > 0? 1 : 0);
        else
        {
            ++tekStroka;
            vTekStroke = strlen(tekSlovo);
        }
    }
    cout << tekStroka/strok + (tekStroka%strok > 0? 1 : 0);
    return 0;
}
Неправильный ответ на 4м тесте. В чем ошибка?
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.07.2014, 15:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задача с тимуса №1881 (C++):

Задача с тимуса - C++
Вот задача с тимуса, возникли с ней проблемы.Я знаю, что на форуме уже есть решение, но всё-таки хотелось бы узнать ошибку в своём кода. ...

задача с Тимуса - C++
http://acm.timus.ru/problem.aspx?space=1&amp;num=1123 Задача на зачет нужна :scratch:

Задача с тимуса - C++
совсем недавно в программировании встретилась задачка с тимуса 1295 проблема в том что в ней используются очень большие числа. и что делать...

задача с Тимуса - C++
http://acm.timus.ru/problem.aspx?space=1&amp;num=1192

Задача с Тимуса 1446 - C++
Всем привет. Я несколько дней бился над задачей с Тимуса. Вот ссыль: вырезано Задача не сложная - просто ввести строки, например, в 4...

Олимпиадная задача с тимуса №1209 - C++
Ограничение времени: 1.0 секунды Ограничение памяти: 64 МБ Представим себе бесконечную последовательность цифр, составленную из...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
castaway
Эксперт С++
4884 / 3020 / 370
Регистрация: 10.11.2010
Сообщений: 11,078
Записей в блоге: 10
Завершенные тесты: 1
04.07.2014, 16:07 #2
Х.з. в чем ошибка. Может условие выложить!?
0
gru74ik
Модератор
Эксперт CЭксперт С++
4178 / 1806 / 197
Регистрация: 20.02.2013
Сообщений: 4,944
Записей в блоге: 21
04.07.2014, 16:17 #3
Цитата Сообщение от castaway Посмотреть сообщение
Может условие выложить!?
1881. Длинное условие задачи
Ограничение времени: 0.5 секунды
Ограничение памяти: 64 МБ
Пока Федя писал условие для задачи «Летопись GOV», ему пришло в голову, что бумаги для печати условий может не хватить. А тут ещё оказалось, что в его текстовом редакторе нет возможности определить количество страниц в тексте. Однако Федя не растерялся и решил сам написать программу, рассчитывающую количество страниц по введённому тексту.
Он знал, что на каждой странице h строк, а в каждой строке w символов. Между каждой парой соседних слов в одной строке ставится ровно один пробел. Если слово не помещается в строку, Федя не делит его на слоги для переноса и не ставит пробел, а просто пишет всё слово с начала новой строки.
Исходные данные
В первой строке записаны целые числа h, w, n — количество строк на странице, символов в строке и слов в тексте задачи, соответственно (1 ≤ h, w ≤ 100; 1 ≤ n ≤ 10 000). В следующих n строках записан текст условия, которое написал Федя, по одному слову в строке. Слова в условии непусты, имеют длину не более w и состоят только из строчных и заглавных латинских букв и знаков препинания (точка, запятая, восклицательный и вопросительный знаки). Суммарная длина всех слов не превосходит 10 000.
Результат
Выведите количество страниц в тексте условия задачи.
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
04.07.2014, 16:41 #4
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот правильный код
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
#include <iostream>
using std::cin;
using std::cout;
 
int main()
{
    int strok, simvolov, slov,
        tekStroka = 1, vTekStroke = 0; // номер текущей строки и кол-во символов в текущей строке
    char tekSlovo[101];
    cin >> strok >> simvolov >> slov;
    cin.ignore('\n', 10);
 
    for (int i = 0; i < slov; i++)
    {
        cin.getline(tekSlovo,101);
        if (vTekStroke + strlen(tekSlovo) + (vTekStroke > 0? 1 : 0) <= simvolov)
            // если в строке уже есть слова, надо добавить 1 пробел
            vTekStroke += strlen(tekSlovo) + (vTekStroke > 0? 1 : 0);
        else
        {
            ++tekStroka;
            vTekStroke = strlen(tekSlovo);
        }
    }
    cout << tekStroka/strok + (tekStroka%strok > 0? 1 : 0);
    return 0;
}
Единственное отличие от кода Керра, в том, что я добавил cin.ignore('\n', 10). Дело в том, что после того как считаешь 3 целых числа, в потоке будет стоять символ конца строки (обычно 2 символа - 10 и 13). И, затем эти символы ты попытаешься считать в строку (вместо нормальной первой строки). В итоге самая последняя строка не будет прочитана. cin.ignore позволяет выкинуть из потока эти ненужные символы.
1
MayaNash
1285 / 453 / 47
Регистрация: 24.08.2011
Сообщений: 2,214
04.07.2014, 16:58  [ТС] #5
Dani, благодарю

Добавлено через 4 минуты
Dani, сработало, но почему не cin.ignore(10,'\n')? вроде такой у него синтаксис
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,282
Записей в блоге: 2
Завершенные тесты: 1
04.07.2014, 17:06 #6
Перепутал значит. Вообще очень повезло: я от балды поставил число 10. А это ведь один из двух символов, которые используются для перевода строки (какой - не помню): либо возврат каретки, либо сам перевод строки.
Это число 10 было приведено в char и вот, собственно
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2014, 17:06
Привет! Вот еще темы с ответами:

Предохранители. Задача с тимуса №1327 - C++
Ограничение времени: 1.0 секунды Ограничение памяти: 64 МБ Янус Полуэктович (не помню уже, А или У) воспользовался машиной только...

Задача с тимуса про сороконожку - C++
У сороконожки 40 левых ножек и 40 правых ножек. Под кроватью у сороконожки a левых тапочек и b правых тапочек. Сороконожка, просыпаясь,...

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

Задачка из тимуса - C++
Добрый день. Сижу тут решаю задачку из тимуса и что то не прет :( Немогли бы помочь, подкинуть несколько идей как ее решить. Заранее...


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

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

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