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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Маргарита911
4 / 4 / 1
Регистрация: 07.11.2009
Сообщений: 11
#1

Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. - C++

08.05.2010, 20:26. Просмотров 1080. Ответов 4
Метки нет (Все метки)

Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. Проверку оформит в виде функции.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2010, 20:26     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию.
Посмотрите здесь:

Дано 200 вещественных чисел. Определить, сколько из них больше предыдущего числа - C++
Дано 200 вещественных чисел. Определить, сколько из них больше предыдущего числа. Заранее благодарна.

Даны целые числа A B C, проверить можно ли из них составить геометрическую прогрессию - C++
Даны целые числа A B C , проверить можно ли из них составить геометрическую прогрессию. Если да, со ставьте из них возрастающую и убывающую...

Последовательно вводятся N целых чисел. Определить, сколько из них совпадает с первым числом - C++
Последовательно вводятся N целых чисел. Определить, сколько из них совпадает с первым числом Нужно написать код в printf i scanf

Определить, образуют ли элементы массива геометрическую прогрессию - C++
определить, образуют ли элементы массива геометрическую прогрессию; Помогите решить.

Определить составляют ли заданные числа геометрическую прогрессию - C++
1ый курс, и уже трудности,хотя трудность по математике задача из учебника если данные цифры составляют геометрическую погрессию,...

Дано N целых чисел. Требуется выбрать из них максимальное число. - C++
народ всем привет помогите плс мои задания : 1.Дано N целых чисел. Требуется выбрать из них максимальное число. Ввод Вводится...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
08.05.2010, 21:16     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. #2
А знаменатель прогрессии не задан?
Hell Knight
230 / 84 / 3
Регистрация: 11.03.2010
Сообщений: 290
09.05.2010, 10:08     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. #3
т. е. сколько чисел образуют геометрическую прогрессию...
тогда сколько чисел считать геометрической прогрессией(я так думаю 3 это минимум...) ?
Mr.X
Эксперт С++
3048 / 1693 / 265
Регистрация: 03.05.2010
Сообщений: 3,867
09.05.2010, 12:30     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. #4
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
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
//Дано N десятков целых чисел. Определить, сколько из них могут составлять 
//геометрическую прогрессию. Проверку оформит в виде функции.
#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <algorithm>
#include <ctime>
 
typedef std::vector<size_t> T_int_vect;
 
size_t get_rand()
{
    const size_t period = 50;
    return rand() % period;
}
 
T_int_vect  make_int_arr(size_t sz)
{    
    T_int_vect arr(sz);       
    //Заполняем массив случайными числами.
    srand(static_cast<unsigned>(time(0)));
    std::generate(arr.begin(), arr.end(), get_rand);
    return arr;
}
 
std::ostream& operator<<(std::ostream& os, const T_int_vect& v)
{
    const size_t row_size = 10;
    for(size_t i = 0; i < v.size(); ++i)
    {
        if(i % row_size == 0)
        {
            std::cout << std::endl;
        }
        std::cout << v[i] << ' ';
    }
    return os;
}
 
T_int_vect get_prepared_int_arr(T_int_vect nums)
{
    //Сортируем массив и удаляем одинаковые элементы.
    std::sort(nums.begin(), nums.end());
    T_int_vect::const_iterator new_end 
        = std::unique(nums.begin(), nums.end());
    nums.erase(new_end, nums.end());
    //Удаляем нулевой элемент.
    if(nums.front() == 0) nums.erase(nums.begin());
    return nums;
}
 
size_t get_max_progression_size
    (
        const T_int_vect&  v,
        size_t&            first_progr_elem,
        size_t&            znam
    )
{
    size_t cur_max_progression_size = 0;
    //Обходим вектор.
    for(T_int_vect::const_iterator num_it = v.begin();
        num_it != v.end(); ++ num_it)
    {
        //Для текущего элемента вектора обходим все возможные значения
        //знаменателя геометрической прогрессии.
        size_t max_znam = v.back() / *num_it;
        for(size_t cur_znam = 2; cur_znam <= max_znam; ++cur_znam)
        {            
            size_t cur_max_progr_elem_znam_size = 0;
            //Для текущего знаменателя прогрессии получаем все возможные
            //значения элементов прогрессии и подсчитываем, какие из них
            //есть в массиве.
            for(size_t cur_progr_elem = *num_it; 
                cur_progr_elem <= v.back(); cur_progr_elem *= cur_znam)
            {                
                T_int_vect::const_iterator v_it 
                    = std::find(v.begin(), v.end(), cur_progr_elem);
                if(v_it == v.end())
                {
                    break;
                }
                else
                {
                    ++cur_max_progr_elem_znam_size;                     
                }
                if(cur_max_progr_elem_znam_size > cur_max_progression_size)
                {
                    cur_max_progression_size = cur_max_progr_elem_znam_size;
                    first_progr_elem         = *num_it;
                    znam                     = cur_znam;                    
                }
            }//for(size_t cur_progr_elem = *num_it; 
        }//for(size_t cur_znam = 2; cur_znam <= max_znam; ++cur_znam)
    }//for(T_int_vect::const_iterator num_it = v.begin();
    return cur_max_progression_size;
}
 
void show_progr
    (
        size_t size, 
        size_t first_el, 
        size_t znam
    )
{
    T_int_vect progr;
    size_t cur_elem = first_el;
    for(size_t i = 0; i < size; ++i)
    {
        progr.push_back(cur_elem); 
        cur_elem *= znam;
    }
    std::cout << progr;
}
 
int main()
{
    size_t        n;
    const size_t  n_min = 1;
    const size_t  n_max = 100;
    T_int_vect    start_nums;
    T_int_vect    prepared_nums;    
    size_t        max_progression_size;
    size_t        first_pr_el;
    size_t        zn;
   
    for(;;)
    {        
        std::cout << std::endl
                  << std::endl
                  << std::endl;
        //Запрашиваем у пользователя размер массива.             
        do
        {
            std::cout << "Input array size from ["
                      << n_min
                      << ", "
                      << n_max
                      << "]: ";
            std::cin >> n;
        }while(n < n_min || n_max < n);
        //Создаем массив заданного размера и заполняем его случайными числами.
        start_nums = make_int_arr(n);
        //Выводим этот массив на экран.
        std::cout << std::endl
                  << "Start array: "
                  << start_nums;
        //Сортируем массив и удаляем одинаковые элементы.
        //Удаляем нулевой элемент.
        prepared_nums = get_prepared_int_arr(start_nums);
        //Выводим этот массив на экран.
        std::cout << std::endl
                  << std::endl
                  << "Prepared array: "
                  << prepared_nums;
        //Находим длину максимальной геометрической прогрессии 
        //которую можно составить из чисел массива.
        max_progression_size 
            = get_max_progression_size(prepared_nums, first_pr_el, zn);
        //Выводим это число и саму прогрессию:
        std::cout << std::endl
                  << "Max progr size = "
                  << max_progression_size
                  << std::endl
                  << "Progression: ";
                  show_progr(max_progression_size, first_pr_el, zn);
    }//for
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2010, 13:30     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию.
Еще ссылки по теме:

Дано множество чисел. Определить, есть ли среди них кратные 2 - C++
Дано множество чисел. Определить, есть ли среди них кратные 2

Дано произвольный одномерный массив целых чисел М и натуральное число n. Определить, если такие есть, количество чисел n в массиве М и их индексы - C++
Ребята,помогите с заданием: Дано произвольный одномерный массив целых чисел М и натуральное число n. Определить, если такие есть,...

Покер - даны 5 целых чисел. Определить в них комбинации повторяющихся элементов - C++
есть массив. надо определить в нем комбинации повторяющихся элементов: for(int i=0; i&lt;5;i++) { ...

Сформировать убывающую геометрическую прогрессию - C++
Сформировать убывающую геометрическую прогрессию: начальное значение - 64, конечное значение - 1, шаг - 4; и вычислить произведение ее...

Образуют ли числа геометрическую прогрессию? - C++
Привет программистам. Такое дело. Есть задание &quot;Даны три натуральных числа A,B,C. Написать программу, определяющую образуют ли они...

Определить, сколько среди них чисел меньших К, равных К и больших К. - C++
Задана последовательность из N вещественных чисел. Определить, сколько среди них чисел меньших К, равных К и больших К.


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

Или воспользуйтесь поиском по форуму:
valeriikozlov
Эксперт C++
4669 / 2495 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
09.05.2010, 13:30     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию. #5
Цитата Сообщение от Hell Knight Посмотреть сообщение
тогда сколько чисел считать геометрической прогрессией(я так думаю 3 это минимум...) ?
Немного ошиблись. (на 1). Минимум это 2.
Yandex
Объявления
09.05.2010, 13:30     Дано N десятков целых чисел. Определить, сколько из них могут составлять геометрическую прогрессию.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru