Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.62/65: Рейтинг темы: голосов - 65, средняя оценка - 4.62
6 / 5 / 0
Регистрация: 28.09.2010
Сообщений: 366
1

Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц

22.01.2013, 23:28. Показов 13054. Ответов 6
Метки нет (Все метки)

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

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
#include <iostream>
#include <iostream>
#include <fstream>
 
using namespace std;
 
int i=0, schet, num=0, dlina;
char stroka[101];
 
int main(){ 
    ifstream in("INPUT.TXT");
    in >> stroka;
    in.close();
    dlina=strlen(stroka);
    while (i<dlina){
    if (stroka[i] == 0) schet+=1;
    else schet=0;
    if (schet>num) num=schet;
    i+=1;   
    }
    ofstream out("OUTPUT.TXT");
    out << num;
    out.close();
    return 0;
}
Прошу помощи. Объясните, если не трудно, почему не работает.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.01.2013, 23:28
Ответы с готовыми решениями:

Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц
Здравствуйте, не могу понять в чём может быть ошибка :) Решаю олимпиадную задачу. Но система...

Найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц
Нужно найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц. В чем...

String char айти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц
Требуется найти самую длинную непрерывную цепочку нулей в последовательности нулей и единиц При...

Матрица L(n,k) состоит из нулей и единиц. Найти в ней самую длинную цепочку подряд стоящих нулей по горизонтал
Помогите решить на C++ QtCreator

6
9 / 9 / 8
Регистрация: 21.01.2013
Сообщений: 20
23.01.2013, 13:29 2
Я думаю, что у вас ошибка в логике. Попробуйте разобрать мой вариант программы для этой задачи. Всё прокомментировано для того, чтобы вам было проще это понять.

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main()
{ 
    char ch; // считываемый символ
    int count = 0; // определяет кол-во таких символов
    char stroka[100]; // массив, в который будут записаны эти символы для дальнейшей работы с ними
    
    ifstream fin("input.txt"); // открываем файл для чтения
    // посимвольно считываем из файла, пока не будет достигнут конец файла 
    while((fin.get(ch)) && (!fin.eof()))
    {
        stroka[count] = ch;
        count++;
    }
 
    int countZero = 0; // счётчик для количества нулей
    int zero[50]; // массив, каждый элемент которого будет равен количеству нулей от одной ближайшей единицы до другой
    // например, в последовательности 1000010001000000001 zero[0] = 4, zero[1] = 3, zero[2] = 8
    int j = 0;
    // проходим по массиву stroka, создавая при этом массив zero, о содержимом которого было сказано выше
    for(int i = 0; i < count; i++)
    {
        if (stroka[i] == '0')
            countZero++;
        else
        {
            zero[j] = countZero;
            countZero = 0;
            j++;
        }
    }
 
    // в массиве zero находим максимум(это и будет ответ)  и записываем его в output.txt
    int max = zero[0];
    for(int i = 0; i < j; i++)
    {
        if (zero[i] > max)
            max = zero[i];
    }
 
    ofstream fout("output.txt");
    fout << max;
 
    fin.close();
    fout.close();
    return 0;
}
0
Форумчанин
Эксперт CЭксперт С++
8171 / 5021 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
23.01.2013, 15:11 3
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
 
int main(void)
{
    int max = 0, i = 0;
    char x;
    freopen("INPUT.TXT", "r", stdin);
    freopen("OUTPUT.TXT", "w", stdout);
    while(scanf("%c", &x) != EOF)
    {
        if(x - '0' == 1)
        {
            if (i > max)
                max = i;
            i = 0;
        }
        else
            i++;
    }
    printf("%d", max);
    return 0;
}
0
0 / 0 / 1
Регистрация: 29.10.2017
Сообщений: 6
02.01.2018, 17:24 4
Извините, а можно без файлового ввода/вывода ?)

Добавлено через 19 часов 57 минут
MrGluck, Извините, а можно без файлового ввода/вывода, то есть с клавиатуры ?)
0
1363 / 1000 / 316
Регистрация: 28.07.2012
Сообщений: 2,769
02.01.2018, 17:41 5
Цитата Сообщение от calcoolator Посмотреть сообщение
а можно без файлового ввода/вывода, то есть с клавиатуры
Убери строки 7 и 8.
0
7245 / 4901 / 2821
Регистрация: 18.12.2017
Сообщений: 15,396
02.01.2018, 21:56 6
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>
#include <cstring> 
using namespace std;
 
int main()
{ 
    string s;
    int i, j=0, k=0, n=0, m, zero [100];
    cout <<"s="; cin >> s;
    s+='1';    
    m=s.size ();           
    for(i = 0; i < m; i++)    
        if (s[i] == '0')               
            n++;        
        else
        {                       
            zero[j] = n;
            n=0;
            j++;
        }      
    int max = zero[0];        
    for(k = 1; k <j; k++)    
    if (zero[k] > max) max = zero[k];     
    cout <<endl<<"max="<<max;    
    system ("pause");
    return 0;
}
1
2 / 2 / 1
Регистрация: 03.01.2018
Сообщений: 6
03.01.2018, 21:18 7
Сам эту задачу на acmp решал)
Держи код, он прошел все тесты:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include<iostream> 
#include<string> 
using namespace std; 
int main() 
{ 
int b=0,max=-999999; 
string a; 
cin>>a; 
a+='1'; 
for(int i=0;i<a.size();i++) 
{ 
 if(a[i]=='0')
 b++; 
 if(a[i]=='1')
 { 
 if(max<b)
 max=b; 
 b=0; 
 } 
} 
cout<<max; 
return 0; 
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2018, 21:18

Определить самую длинную непрерывную цепочку нулей
Всем вечер добрый. Нужна помощь с задачкой. Условие такое: Есть последовательность из нулей и...

Найдите в матрице самую длинную цепочку подряд идущих нулей по горизонтали и вертикали
Матрица состоит из нулей и единиц. Найдите в ней самую длинную цепочку подряд идущих нулей по...

В строке из групп нулей и единиц найти самую короткую группу
Здравствуйте, помогите пожалуйста с заданием. Желательно максимально просто. При выполнении...

В матрице из нулей и единиц найти квадрат заданного размера, состоящую целиком из нулей
В матрице A (m, n), которая состоит из нулей и единиц, найти квадрат заданного размера (квадратную...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru