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

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

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

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

20.07.2013, 00:16. Просмотров 892. Ответов 4
Метки нет (Все метки)

Опять проблема с вводом/выводом через файлы. Как решить вот эту задачу:
Кликните здесь для просмотра всего текста
Нули
(Время: 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);

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

Выкинуть нули - C++
#include<iostream.h> #include<conio.h> #include<stdlib.h> void main() { int n,k,x,i; cout<<"Koli4estvo elementov v masive: ";...

Отбросить нули - C++
Ребят помогите отбросить нули. Например я ввожу 0000000000000005,45 а он должен принимать 5,45. И еще вопрос как сделать чтобы он не...

В ответе нули - C++
Только начинаю. Нужно было написать банальную формулу, чтобы просто подставлять х ((-1)/x^2 ). Если х=1, то ответ выводит Если х -...

Нули в конце записи n! - C++
Эта программа вычисляет нули в конце записи факториала числа: #include <stdio.h> #include <math.h> long recourse(long n) //n -...

Как убрать нули - C++
Есть массив, вывожу задом-наперед, так как не знаю сколько именно чисел введет пользователь - делаю его заведома больше чем надо, там где...

Не отображаются ведущие нули - C++
Подскажите пожалуйста при чтении из файла (файл содержит цифры 00123456) теряются ведущие нули (123456-получается). Как сохранить нули?

4
Wolkodav
605 / 458 / 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 минуты
Комментарий к коду, считываем так, потому, что считывается всегда до пробела или конца строки, так что проканает.
0
alsav22
5426 / 4821 / 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; // тут обработка считанного символа
}
0
Нету имени
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;
}
0
Dani
1393 / 637 / 57
Регистрация: 11.08.2011
Сообщений: 2,290
Записей в блоге: 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;
}
1
20.07.2013, 15:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.07.2013, 15:23
Привет! Вот еще темы с ответами:

Нужно отбросить нули - C++
Вот смотрите. У меня стоит условие что если ввести больше 16 символов то попросит ввести заново. Как сделать так что если ввести...

Почему выводит нули? #c++ - C++
int i; int p = 1; for(i=1; i&lt;=n+1; i++){ x = (1/2)*(cos((2*i+5)/(18*(n+1))) + l); cout&lt;&lt;x&lt;&lt;&quot;\n&quot;; p++; }; n объявлено...

Почему выводит нули?! - C++
Должно же перемножать. Почему выводит нули?! long double fact(int N) { if (N &lt; 0) return 0; if (N == 0) return 1;...

Распознать нули и единицы - C++
Помогите написать задачку, очень надо)) 00010001110 это условие 00010001010 00010001010 00010001110 и вот, что должно...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

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