Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 05.06.2012
Сообщений: 75
1

Задача Нули

20.07.2013, 00:16. Просмотров 2378. Ответов 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.07.2013, 00:16
Ответы с готовыми решениями:

Удалить нули из массива! Как удалить нули?но чтобы рисунок остался!
#include <iostream> #include <iomanip> using namespace std; int main() { int r,c; ...

Скопировать в новый текстовый файл все символы исходного, заменив все нули на единицы, а единицы на нули
Дан текстовый файл f. Переписать в файл g все компоненты файла f с заменой символа 0 на символ 1 и...

Задача. Нули под главной диагональю
Преобразовать двумерный массив размерами 3х4 к треугольному виду: (нули под главной диагональю). ...

нули
Как можно найти точки пересечения смещенной sin(x) с осью координат?

4
620 / 474 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
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
5475 / 4870 / 831
Регистрация: 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
178 / 23 / 7
Регистрация: 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;
}
1
1401 / 643 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.07.2013, 15:23

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Добавить Нули
И так снова добрый день друзья на этот рас вот такой вопрос) у меня есть допустим место в 8...

Добавочные нули
Здравствуйте, имеется консольное приложение на С# для электронной очереди. Извлекаем из базы данных...

Выводит нули
Задача: Для N целых чисел определить сумму и количество положительных чисел, которые делятся на 6...


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

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

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