Форум программистов, компьютерный форум CyberForum.ru

Булевые массивы "веса" от 1 - n - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Обработка одномерной матрицы http://www.cyberforum.ru/cpp-beginners/thread1208859.html
Как найти минимальный элемент среди отрицательных элементов в одномерном массиве?
C++ Зачем в конце констант добавляют L либо F Столкнулся с записью вида: float i = 10000.06f зачем так делать и что оно даёт, в литературе по С++ не встречал, сейчас читаю Кернигана и Ричи (С ANSI), там есть такое момент когда целую константу объявленную как инт, записывают с L в конце, дабы в случае если не число не поместится в инт, то оно будет восприниматься как флоат...этот момент мне тоже не понятен. http://www.cyberforum.ru/cpp-beginners/thread1208853.html
Что делает компилятор с этим? C++
Здравствуйте, такой вопрос: что делает компилятор с операторами типа: int x; 15.5f; 3, 'c'; "stroka", x; он их просто игнорирует или как?
C++ В каждой строке текстового файла найти самую длинную последовательность цифр
В каждой строке текстового файла найти самую длинную последовательность цифр. значение ее длины превратить в строку, записать в начале строки исходного файла. Результаты записать в новый файл. -------------------- помогите сделать нужно на завтра. Мучаюсь 3 день на ней.
C++ Ошибка базового класса строки http://www.cyberforum.ru/cpp-beginners/thread1208822.html
Есть код и есть ошибки в mystring.cpp, помогите пожалуйста исправить :help: /*----------------/ mystring.h /---------------*/ #ifndef MYSTRING_H #define MYSTRING_H
C++ программист С++ удалёнка - реально ли? Ненмого не по теме, но не нашёл более подходящей темы. Вообщем многие из знакомых веб-программисты работают удалённо, 1 вообще живёт при этом на Бали, но поскольку я работаюв другой области и с железом, то мне понятное дело сидеть в офисе...Вот интересно, программисты С++,Java,С# часто ли работаю по удалёнке и при этом имеют неплохой доход(для меня это от 50т.р. СПБ). Фриланс с лабами итп не в... подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3049 / 1694 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
16.06.2014, 11:03
Рекурсивный вариант:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
/////////////////////////////////////////////////////////////////////////////////////////
//Задача в том, что нужно создать все булевые массивы одной длины, количество "1" 
//в которых равно 1,2...n.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void  print_binary_numbers_with_size_and_units_total
    (
        int                 size,
        int                 units_total,
        T_str   const   &   prefix,
        int             &   num_counter
    )
{
    if( size == 0 )
    {
        std::cout   <<  '#'
                    <<  ++num_counter
                    <<  '\t'
                    <<  prefix
                    <<  std::endl;
        return;
    }
 
    if( units_total     <   size )
    {
        print_binary_numbers_with_size_and_units_total
            (
                size - 1,
                units_total,
                prefix + '0',
                num_counter
            );
    }
 
    if( units_total > 0 )
    {
        print_binary_numbers_with_size_and_units_total
            (
                size - 1,
                units_total - 1,
                prefix + '1',
                num_counter
            );
    }//if
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_prompt_and_input_val_not_less_than
    (
        T_str   const   &   prompt,
        int             &   val,
        int                 left_bound
    )
{
    do
    {
        std::cout   <<  prompt;
        std::cin    >>  val;
    }
    while( val < left_bound );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        int     size    =   0;
 
        print_prompt_and_input_val_not_less_than
            (
                "Длина двоичного числа\t\t: ",
                size,
                1
            );
 
        int     units_total     =   0;
 
        print_prompt_and_input_val_not_less_than
            (
                "Количество единиц в числе\t: ",
                units_total,
                0
            );
 
        int     num_counter     =   0;
        print_binary_numbers_with_size_and_units_total
            (
                size,
                units_total,
                T_str(),
                num_counter
            );
        std::cout   <<  "\n\n\n\n\n\n";
    }//for
}
Добавлено через 5 минут
Нерекурсивный вариант:
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/////////////////////////////////////////////////////////////////////////////////////////
//Задача в том, что нужно создать все булевые массивы одной длины, количество "1" 
//в которых равно 1,2...n.
/////////////////////////////////////////////////////////////////////////////////////////
#include <iostream>
#include <string>
/////////////////////////////////////////////////////////////////////////////////////////
typedef std::string     T_str;
/////////////////////////////////////////////////////////////////////////////////////////
void  print_binary_numbers_with_size_and_units_total
    (
        int     size,
        int     units_total
    )
{
    T_str   s       ( size - units_total,   '0' );
    s   +=  T_str   ( units_total,          '1' );
 
    int     num_counter     =   0;
 
    for(;;)
    {
        std::cout   <<  '#'
                    <<  ++num_counter
                    <<  "\t"
                    <<  s
                    <<  std::endl;
 
        T_str::size_type    pos     =   s.rfind( "01" );
 
        if( pos ==  T_str::npos )
        {
            break;
        }
 
        std::swap
            (
                s[ pos     ],
                s[ pos + 1 ]
            );
 
        //Если в конце нули, то реверсируем участок от pos + 2 до конце.
        for (
                int  L = pos + 2, R = size - 1;
 
                    L       <   R
                &&  s[L]    ==  '1'
                &&  s[R]    ==  '0';
 
                ++L, --R
            )
        {
            std::swap
                (
                    s[L],
                    s[R]
                );
        }//for
    }//for
}
/////////////////////////////////////////////////////////////////////////////////////////
void  print_prompt_and_input_val_not_less_than
    (
        T_str   const   &   prompt,
        int             &   val,
        int                 left_bound
    )
{
    do
    {
        std::cout   <<  prompt;
        std::cin    >>  val;
    }
    while( val < left_bound );
}
/////////////////////////////////////////////////////////////////////////////////////////
int  main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        int     size    =   0;
 
        print_prompt_and_input_val_not_less_than
            (
                "Длина двоичного числа\t\t: ",
                size,
                1
            );
 
        int     units_total     =   0;
 
        print_prompt_and_input_val_not_less_than
            (
                "Количество единиц в числе\t: ",
                units_total,
                0
            );
 
        print_binary_numbers_with_size_and_units_total( size, units_total );
        std::cout   <<  "\n\n\n\n\n\n";
    }//for
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru