Skip to content

Commit c3312b9

Browse files
committed
Merge branch 'lab-9-var-11' (fully ready)
2 parents dc65b4d + 6dd0650 commit c3312b9

3 files changed

Lines changed: 38 additions & 2 deletions

File tree

Variants/Lab_9/var_11/main.cpp

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
// доп: вывести кол во серий из единиц длинной больше 2
66

77
#include "sequence.h"
8+
#define DOP
89

910
int main() {
1011
// вводим N
@@ -16,4 +17,13 @@ int main() {
1617
"%llu -> bin: %s\nMax 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
}

Variants/Lab_9/var_11/sequence.cpp

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff 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
}

Variants/Lab_9/var_11/sequence.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff 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);

0 commit comments

Comments
 (0)