File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 55// доп: вывести кол во серий из единиц длинной больше 2
66
77#include " sequence.h"
8+ #define DOP
89
910int main () {
1011 // вводим N
@@ -16,4 +17,13 @@ int main() {
1617 " %llu -> bin: %s\n Max length: %d\n " ,
1718 N, dtoab (N), count_max_ones (N)
1819 );
20+
21+ #ifdef DOP
22+
23+ printf ( // количество серий из единиц
24+ " Series with length > 2: %d\n " ,
25+ count_ones_series (N)
26+ );
27+
28+ #endif
1929}
Original file line number Diff line number Diff line change @@ -30,7 +30,6 @@ char *dtoab(unsigned long long N) {
3030 // сдвигаем чтобы получить следующий бит
3131 N = N >> 1 ;
3232 }
33-
3433 // добавляем в конец \0 и выходим
3534 arr[len] = 0 ;
3635 return arr;
@@ -50,4 +49,27 @@ int count_max_ones(unsigned long long N) {
5049 max = current > max ? current : max;
5150 }
5251 return max;
52+ }
53+
54+ // нахождение количества серий
55+ // из единиц длинной больше 2
56+ int count_ones_series (unsigned long long N) {
57+ // преобразуем число в двоичную строку
58+ char *str = dtoab (N);
59+ int count = 0 , current = 0 ;
60+
61+ // проходим по всем битам числа
62+ for (int i = 0 ; str[i] != 0 ; i++) {
63+ if (str[i] == ' 1' ) {
64+ current++;
65+ } else {
66+ // увеличиваем счетчик если последовательность > 2
67+ if (current > 2 ) count++;
68+ // обнуляем счетчик
69+ current = 0 ;
70+ }
71+ }
72+ // не забываем про младшие биты
73+ if (current > 2 ) count++;
74+ return count;
5375}
Original file line number Diff line number Diff line change @@ -11,4 +11,8 @@ char *dtoab(unsigned long long N);
1111
1212// нахождение длины максимальной
1313// последовательности из единиц
14- int count_max_ones (unsigned long long N );
14+ int count_max_ones (unsigned long long N );
15+
16+ // нахождение количества серий
17+ // из единиц длинной больше 2
18+ int count_ones_series (unsigned long long N );
You can’t perform that action at this time.
0 commit comments