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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
CityFix
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 5
#1

Найти НОД для всех элементов массива - C++

27.01.2010, 09:37. Просмотров 1642. Ответов 5
Метки нет (Все метки)

Подскажите как найти наибольший общий делитель всех элементов массива?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.01.2010, 09:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Найти НОД для всех элементов массива (C++):

Как найти НОД всех элементов массива (на который они все делятся без остатка) - C++
Ребят выручите пожалуйста! Никак не могу сообразить как именно надо это сделать! Я только начал изучать С++. И мне дали такое задание....

Для всех чётных элементов массива найти их корень - C++
#include "stdafx.h" #include "stdafx.h" #include <conio.h> #include <iostream> #include <math.h> #include <stdio.h> #include...

Найти сумму всех положительных элементов массива и среднее арифметическое всех элементов - C++
Помогите написать программу: Дан массив A. Найти сумму всех положительных элементов массива и среднее арифметическое всех чисел.

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

Найти разность между произведением всех положительных элементов массива и суммой модулей всех отрицательных - C++
В массиве из 9 действительных чисел определить разность между произведением всех положительных элементов и суммой модулей всех...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.01.2010, 09:48 #2
CityFix, Берете значение самого маленького элемента, и проверяете все элементы массива на делимость без остатка на это значение. Если нет, то уменьшаете это значение на 1, и снова проверяете. В конце концов как максимум на 1 остановитесь.
0
CityFix
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 5
27.01.2010, 09:58  [ТС] #3
Цитата Сообщение от valeriikozlov Посмотреть сообщение
CityFix, Берете значение самого маленького элемента, и проверяете все элементы массива на делимость без остатка на это значение. Если нет, то уменьшаете это значение на 1, и снова проверяете. В конце концов как максимум на 1 остановитесь.
А наброски кода какие нибудь у Вас есть?
0
valeriikozlov
Эксперт C++
4670 / 2496 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
27.01.2010, 10:19 #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
#include<iostream> 
using namespace std; 
int main()
{
    const int N=5;
    int mas[N]={12,3,15,21,18};
    int max_NOD=mas[0], i;
    for(i=1; i<N; i++)
        if(max_NOD>mas[i])
            max_NOD=mas[i];
    int fl=1;
    while(fl)
    {
        fl=0;
        for(i=0; i<N; i++)
            if(mas[i]%max_NOD!=0)
                fl=1;
        max_NOD--;
    }
    max_NOD++;
    cout<<max_NOD<<endl;
    return 0;
}
1
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
27.01.2010, 18:12 #5
Ерунда все это.
Алгоритм неэффективный.
А если самое маленькое значение - 1000000, а NOD всего массива при этом равен 1 ?
Будем цикл 999999 раз перебирать ?

Как известно NOD(a1,a2,a3,a4)=NOD(NOD(NOD(a1,a2),a3),a4)
Отсюда следует простой код:
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
/* Thread 90039 */
 
#include <stdio.h>
 
 
/********************************************************************/
int gcd( int a, int b );
int arr_gcd( int n, const int *pa );
 
 
/********************************************************************/
int main( void ) {
 
int g;
int a[6]= { 12000, 300, 1500, 2100, 18000, 291 };
 
 
g= arr_gcd( 6, a );
printf( "%d\n", g );
 
return 0;
 
} /* main() */
 
 
/********************************************************************/
int gcd( int a, int b ) {
 
int c;
 
while (b!=0) {
    c= a%b; a= b; b= c;
}
return ((a>=0) ? a : -a);
 
} /* gcd() */
 
 
/********************************************************************/
int arr_gcd( int n, const int *pa ) {
 
int i, g;
 
 
if ( n<1 ) { return 1; }
g= pa[0];
for ( i= 1; i<n; i++ ) { g= gcd( g, pa[i] ); }
return g;
 
} /* arr_gcd() */
1
CityFix
0 / 0 / 0
Регистрация: 27.01.2010
Сообщений: 5
26.03.2010, 05:14  [ТС] #6
Спасибо всем откливнушимся
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.03.2010, 05:14
Привет! Вот еще темы с ответами:

Найти количество элементов превышающих среднее арифметическое всех элементов массива - C++
Дано одномерный массив из 15 целых чисел. Найти количество элементов превышающих среднее арифметическое всех элементов массива.

найти среднее арифметическое всех элементов массива, кроме элементов... - C++
Дан массив размера N и целые числа K и L (1 &lt; K ≤ L ≤ N). Найти среднее арифметическое всех элементов массива, кроме элементов с номе-рами...

Найти сумму всех элементов массива, кроме элементов с номерами от K до L - C++
Дан массив размера N и целые числа K и L (1 &lt; K ≤ L ≤ N). Найти сумму всех элементов массива, кроме элементов с номерами от K до L...

Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива - C++
Помогите написать код, пожалуйста Ввести c клавиатуры массив из 5 элементов, найти среднее арифметическое всех элементов массива


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.03.2010, 05:14
Ответ Создать тему
Опции темы

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