Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 09.03.2018
Сообщений: 50
1

Найти количество подряд идущих в двоичном коде

19.05.2022, 17:28. Показов 722. Ответов 3

Author24 — интернет-сервис помощи студентам
Собственно, есть такая задача.
Дано число в 10-ичной системе исчисления. К примеру: 1254. Его надо перевести в двоичную: 10011100110
и потом для двоичного числа найти количество подряд идущих.

Числа стоящие по одиночке: 2
Числа стоящие 2 в ряд: 3
Числа стоящие 3 в ряд: 1
и т.д.

Я написал такой код. Но он максимально костыльный. Также, не знаю, как определить что число стоит в одиночку. Т.е. слева и справа не его сосед. И также, как перевести из 10и чной в двоичную и разбить число на массив..

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
#include <iostream>
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "rus");
    const int ll = 11;
    int arr[ll] = { 1,0,0,1,1,1,0,0,1,1,0};
    int k = 1;
    int number;
    int arr2[ll][2] = { NULL };
 
    for (int i = 0; i < ll; i++)
    {
        cout << arr[i] << " ";
        arr2[i][0] = i + 1;
    }
    for (int k = 0, i = 0; i < ll-1; i++)
    {
        if (arr[i] == arr[i + 1])
        {
            k += !k ? 2 : 1;
            number = arr[i];
        }
        if (k && (arr[i] != arr[i + 1] || i == ll-1))
        {
            for (int jj = 0; jj < ll; jj++) {
                if (arr2[jj][0] == k)arr2[jj][1]+=1;              
            }
            k = 0;
            number = arr[i];
        }
    }
    for (int jj = 0; jj < ll; jj++) {
        if (arr2[jj][1] != 0)cout<<"\n" << arr2[jj][0] << "-атные повторяются: " << arr2[jj][1];
    }
    return 0;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2022, 17:28
Ответы с готовыми решениями:

Определить максимальное количество подряд идущих единиц в двоичном числе
Разработать алгоритм, определяющий максимальное количество подряд идущих единиц в двоичном числе....

Найти количество элементов, идущих подряд
В массиве из 20 элементов числа образуют неубываюшую последовательность. Несколько элементов,идущих...

Найти наибольшее количество идущих подряд цифр
Дан текст. Найти наибольшее количество идущих подряд цифр. Вывести эту последовательность на экран.

Найти наибольшее количество идущих подряд цифр
Дан текст . Найти наибольшее количество идущих подряд цыфр . Добавлено через 17 часов 15 минут...

Найти наибольшее количество цифр, идущих подряд
Привет всем такая проблема есть код но не знаю где в нём ошибка помогите пожалуйста uses crt;...

3
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
19.05.2022, 18:21 2
Лучший ответ Сообщение было отмечено ReEvangelion как решение

Решение

через string
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
#include <regex>
#include <string>
#include <bitset>
#include <iostream>
 
 
int main()
{
    std::bitset<32> bs{ 1234 };
    auto str = bs.to_string();
    std::cout << str << "\n";
    str = std::regex_replace(str, std::regex{ "^(?!0+$)0+" }, "");
    std::cout << str << "\n";
    std::vector<int> vct(32);
    std::regex rgx{ "(\\d)\\1*" };
    for (std::sregex_iterator ib{ str.begin(), str.end(), rgx }, ie; ib != ie; ++ib)
    {
        ++vct[ib->operator[](0).length() - 1];
        //std::cout << ib->operator[](0).length() << "\n";
    }
    for (int i = 0; auto n : vct)
    {
        if (n)
        {
            std::cout << i + 1 << ": " << n << "\n";
        }
        ++i;
    }
}
1
1 / 1 / 0
Регистрация: 09.03.2018
Сообщений: 50
19.05.2022, 20:32  [ТС] 3
В 21-ой строке вылазит такая ошибка =(
E3230 Оператор инициализатора в стиле C++20 в операторе for на основе диапазонов является нестандартным в этом режиме.
Ошибка C7585 Основанный на диапазоне оператор for с инициализатором требует как минимум "/std:c++20".

Как это исправить, можете подсказать..

upd: решение найдено.

Добавлено через 7 минут
А не можете подсказать, как сделать так, чтобы число в десятичной вводилась с клавиатуры. Ибо если в 9-ой строке вместо числа ставить переменную, то выбивает ошибку =(

Добавлено через 6 минут
upd: и это тоже найдено решение.
0
2848 / 1997 / 986
Регистрация: 21.12.2010
Сообщений: 3,705
Записей в блоге: 10
19.05.2022, 20:34 4
Цитата Сообщение от ReEvangelion Посмотреть сообщение
ставить переменную
переменная должна быть unsigned int
0
19.05.2022, 20:34
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2022, 20:34
Помогаю со студенческими работами здесь

Найти наибольшее количество подряд идущих букв
Подскажите алгоритм.Например наибольшее количество подряд идущих букв.

Найти количество подряд идущих единиц в строке
string str = &quot;100001111&quot;; int c = 0; int res = 0; for...

Найти наибольшее количество идущих подряд букв
Дан текст, который пользователь должен ввести в программу, найти наибольшее количество идущих...

Найти максимальное количество идущих подряд пробелов
Ребят, привет! Нужна прога.. искал-искал в поиске... чет не нашел))) может, конечно плохо искал))...

Найти наибольшее количество подряд идущих цифр
#include&lt;iostream&gt; #include&lt;string&gt; using namespace std; int main() { string str; ...

Найти наибольшее количество идущих подряд пробелов
1) Дано предложение. Найти наибольшее количество идущих подряд пробелов. 2) Дан список учебных...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru