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

Задача Нули - C++

Восстановить пароль Регистрация
 
wwmwwm
 Аватар для wwmwwm
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
20.07.2013, 00:16     Задача Нули #1
Опять проблема с вводом/выводом через файлы. Как решить вот эту задачу:
Кликните здесь для просмотра всего текста
Нули
(Время: 1 сек. Память: 16 Мб Сложность: 16%)
Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц.

Входные данные

В единственной строке входного файла INPUT.TXT записана последовательность нулей и единиц (без пробелов). Суммарное количество цифр не превышает 100.

Выходные данные

В единственную строку выходного файла OUTPUT.TXT нужно вывести искомую длину цепочки нулей.

Пример

№ INPUT.TXT OUTPUT.TXT
1 00101110000110 4
, я понимаю, да и решение на псевдокоде есть вот тут:
Кликните здесь для просмотра всего текста
Нули
(Время: 1 сек. Память: 16 Мб Сложность: 16%)
Решение №1

Здесь можно определить некоторую переменную-счетчик, в которой хранить текущее количество непрерывно идущих нулей при просмотре последовательности слева направо (можно и справа налево). При этом, если встречается единица, то нужно сбросить значение счетчика на ноль. Просматривая список нужно сверять значение счетчика с максимальным ранее найденным и таким образом запоминать максимальное. Считывать данные можно как в одну строку, обрабатывая нули и единицы как элементы массива, либо читать посимвольно до окончания потока данных.

c=max=0;
while(not EOF){
read(x);
if(x=='0') c=c+1; else c=0;
if(c>max) max=c;
}
write(max);
Решение №2

Можно использовать другой подход к решению этой задачи. Проверить наличие подпоследовательности из k нулей в исходной строке можно с помощью функции strstr в Си или pos в Паскале. Используя это можно создать некоторую пустую строку, которую последовательно удлинять на один ноль и каждый раз проверять имеется ли такая подстрока в исходной до тех пор, пока такая подстрока существует. Длина последней существующей подстроки нулей и будет ответом.

p='';
read(s);
while(p содержится в s) p=p+'0';
write(len(p)-1);

Но у меня не получается считать с файла нули и единицы. Помогите
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.07.2013, 00:16     Задача Нули
Посмотрите здесь:

C++ Выкинуть нули
C++ Найти, на сколько нулей оканчивается число N
Нули в конце массива C++
нули после запятой C++
C++ Отбросить нули
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Wolkodav
 Аватар для Wolkodav
599 / 452 / 32
Регистрация: 18.09.2012
Сообщений: 1,685
20.07.2013, 01:07     Задача Нули #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <fstream>
#include <iostream>
 
using namespace std;
 
const char input[] = "INPUT.TXT";
const char output[] = "OUTPUT.TXT";
 
int main()
{
    string str;
    ifstream read (input);
    read >> str;
// и тут дальше по тексту в str всё что надо
}
Добавлено через 2 минуты
Комментарий к коду, считываем так, потому, что считывается всегда до пробела или конца строки, так что проканает.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2013, 07:55     Задача Нули #3
Цитата Сообщение от wwmwwm Посмотреть сообщение
Но у меня не получается считать с файла нули и единицы. Помогите
В чём собственно проблема?

Не по теме:

wwmwwm, у вас уже несколько тем по поводу простого чтения из файла. Так трудно научиться читать из файла?



C++
1
2
3
4
5
6
ifstream fin("INPUT.TXT");
char ch;
while (fin.get(ch))
{
     cout << ch << endl; // тут обработка считанного символа
}
Или в бинарном режиме:
C++
1
2
3
4
5
6
ifstream fin("INPUT.TXT", ios::binary);
char ch;
while (fin.read(&ch, 1))
{
     cout << ch << endl; // тут обработка считанного символа
}
Нету имени
177 / 22 / 2
Регистрация: 16.05.2013
Сообщений: 181
20.07.2013, 14:06     Задача Нули #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
28
29
30
31
32
33
34
#include <fstream>
#include <cstdlib>
 
int main( int argc, char * argv[] ) {
    
    char szBuff[100];
    std::ifstream file_i; 
    std::ofstream file_o;
        file_i.open( "input.txt" );
        file_o.open( "output.txt" );
        
        file_i.getline( szBuff, sizeof( szBuff ));
        
        int iSize=0, iZeros=1, iBuff=0;
        while( szBuff[iSize] != '\0' ) {
            if( ( szBuff[iSize] == '0' && szBuff[iSize-1] == '0' ) || 
            ( szBuff[iSize-1] == '1' && szBuff[iSize] == '0' ) || 
            ( szBuff[iSize] == '0' && szBuff[iSize+1] == '1' )) {
                ++iZeros;
                if( iZeros >= iBuff )
                {   iBuff = iZeros; }
            }
            if( szBuff[iSize] == '1' )
            {   iZeros = 0;          }
                        
        ++iSize;
        }
        
        file_o << iBuff;
               
file_i.close();
file_o.close();
return 0;
}
Dani
1263 / 621 / 50
Регистрация: 11.08.2011
Сообщений: 2,236
Записей в блоге: 2
Завершенные тесты: 1
20.07.2013, 15:23     Задача Нули #5
Нету имени, ужас какой-то. От чего такие сложности?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <fstream>
#include <string>
#include <algorithm>
 
int main()
{
    std::ifstream input("input.txt");
    std::ofstream output("output.txt");
    std::string s;
    input >> s;
    s += '1';
    int result = 0;
    for (int i = 0, len = 0; i<s.length(); ++i)
        if (s[i] == '0')
            ++len;
        else {
            result = std::max(result, len);
            len = 0;
        }
    output << result;
    return 0;
}
Yandex
Объявления
20.07.2013, 15:23     Задача Нули
Ответ Создать тему
Опции темы

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