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

Идущие подряд числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Сложение и умножение матриц http://www.cyberforum.ru/cpp-beginners/thread223920.html
Даны матрицы A,B,C порядка n. Найти матрицу D=(A+B)C
C++ Пожалуйста найдите ошибку На форуме нашел такую задачу: Гражданин 1 марта открыл счет в банке, вложив 1000 рублей. Через каждый месяц размер вклада увеличивается на 2 % от имеющейся суммы. Определить за какой месяц величина ежемесячного увеличения вклада превысит 30 рублей. Решил ее обобщить и сделать так чтобы можно было указать сумму вклада, процент и предел. Задача довольна простая, но я в этом деле новичок. У... http://www.cyberforum.ru/cpp-beginners/thread223916.html
C++ Написать функцию, которая в заданном массиве определяет количество элементов, находящихся в диапазоне двух введённых чисел.
помогите пожалуйста решить задачки:): 1)Написать функцию, которая в заданном массиве определяет количество элементов, находящихся в диапазоне двух введённых чисел. 2)Написать функцию для поиска максимального элемента, встречающегося в заданной матрице более одного раза. Заранее спасибо)))
C++ Компановка модулей
Здравствуйте. Разделил программу на модули. При связывании компиль пишет: In function `main': undefined reference to `sumSequece(std::ostream&, std::istream&)' ld returned 1 exit status Можете подсказать как правильно скомпановать модули? я пользую DevC++ 4.9.9.2 // SeparateModule - äåìîíñòðèðóåò, êàê ìîæíî ðàçáèòü // ïðîãðàììó íà íåñêîëüêî îòäåëüíûõ ìîäóëåé....
C++ Насчет класса вектор http://www.cyberforum.ru/cpp-beginners/thread223898.html
Помогите в состовлении: создать класс вектор. Члены данные класса - 3 прямоугольные декартовые координаты. Члены функции класса - конструктор,метод вывода вектора. Перегруженные операторы класса - сложение (+),скалярное (%) и векторное (*)произведение векторов, вычесление угла (/) между двумя векторами. Обьекты создаваемые в основной процедуре - a={Ax,Ay,Az};b={Bx,By,Bz} Вычеслить...
C++ Решить систему алгебраических уравнений методом Гаусса Решить систему алгебраических уравнений методом Гаусса: 6X1-X2-X3=11,33, -X1+6X2-X3=32, -X1-X2+6X3=42; подробнее

Показать сообщение отдельно
Mr.X
Эксперт С++
3039 / 1684 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
05.01.2011, 07:15     Идущие подряд числа
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//////////////////////////////////////////////////////////////////////////////////////
//нужно выяснить, есть ли в этом массиве 2 (3, 4...) подряд идущие цифры 
//(11, 22, например), если есть вывести кол-во таких "пар"
//////////////////////////////////////////////////////////////////////////////////////
#include <algorithm>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <string>
//////////////////////////////////////////////////////////////////////////////////////
typedef std::deque<int>          T_digits;
typedef std::string              T_str;
typedef std::map<T_str, size_t>  T_repeats_counter;
////////////////////////////////////////////////////////////////////////////////////// 
void  normalize(T_digits&  digits)
{
    int  ostatok = 0;
    for(T_digits::reverse_iterator dig_rev_it = digits.rbegin(); 
        dig_rev_it != digits.rend(); ++dig_rev_it)
    {
        *dig_rev_it += ostatok;
        ostatok = *dig_rev_it / 10;
        *dig_rev_it %= 10;
    }
    if(ostatok)
    {
        digits.push_front(ostatok);        
        normalize(digits);
    }    
}
//////////////////////////////////////////////////////////////////////////////////////  
T_digits&  operator*=(T_digits&  digits, int  mnozhitel)
{
    std::transform(digits.begin(), digits.end(), digits.begin(), 
                   std::bind2nd(std::multiplies<int>(), mnozhitel));
    normalize(digits);
    return digits;    
}
//////////////////////////////////////////////////////////////////////////////////////  
T_digits big_pow(int osnovanie, int stepen)
{
    T_digits  res_digits(1, 1);
    for(int i = 0; i < stepen; ++i)
    {        
        res_digits *= osnovanie;
    }
    return  res_digits;
}
//////////////////////////////////////////////////////////////////////////////////////  
bool  count_and_print_symb_repeats(T_str  s)
{
    T_repeats_counter  repeats_counter;
    
    for(T_str::iterator  find_it_L = s.begin();;)
    {
        find_it_L = std::adjacent_find(find_it_L, s.end());    
        if(find_it_L == s.end()) break;              
        T_str::value_type  symb_cur    = *find_it_L;
        T_str::size_type   pos_find_L  = std::distance(s.begin(), find_it_L);
        T_str::size_type   pos_find_R  = s.find_first_not_of(symb_cur, pos_find_L);
        size_t  len_cur 
            = ((pos_find_R == T_str::npos) ? s.size() : pos_find_R) - pos_find_L;
        ++repeats_counter[T_str(len_cur, symb_cur)];
        find_it_L += len_cur;
    }
    
    struct  T_print_rep_data
    {
        void  operator() (T_repeats_counter::value_type  repeats_counter_elem)
        {
            std::cout << repeats_counter_elem.first
                      << '\t'
                      << repeats_counter_elem.second
                      << " шт."
                      << std::endl;
        }
    };
 
    std::for_each(repeats_counter.begin(), repeats_counter.end(), T_print_rep_data());
    return  repeats_counter.size() != 0;
}
//////////////////////////////////////////////////////////////////////////////////////
int main()
{
    std::locale::global(std::locale(""));
    for(;;)
    {
        int osn;
        do
        {
            std::cout << std::endl
                      << "Введите целое основание степени  (>= 0): "; 
            std::cin >> osn;
        }while(osn < 0);
        int stepen;
        do
        {
            std::cout << "Введите целый показатель степени (>= 1): ";        
            std::cin >> stepen;        
        }while(stepen < 1);        
        
        std::cout << osn
                  << " ^ "
                  << stepen
                  << " = ";
        T_digits  res_digits = big_pow(osn, stepen);
        std::copy(res_digits.begin(), res_digits.end(),                   
                  std::ostream_iterator<int>(std::cout)); 
        std::cout << std::endl;
 
        T_str  s;
        std::transform(res_digits.begin(), res_digits.end(), std::back_inserter(s),
                       std::bind2nd(std::plus<char>(), '0'));
        std::cout << "В полученном числе встречаются следующие повторения цифр:"
                  << std::endl;
        if(!count_and_print_symb_repeats(s))
        {
            std::cout << "нет повторений."
                      << std::endl;
        }
    }    
}
 
Текущее время: 07:29. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru