Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 167
1

Можно ли упростить еще? НОД

04.08.2017, 18:58. Показов 869. Ответов 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
#include <iostream>
#include <algorithm>
 
using namespace std;
unsigned long Max = 1, z;
bool f = true;
unsigned long int NOD(unsigned long int a, unsigned long int b, unsigned long int c)
{
    if (f) {
        double k;
        k = double(max(a, b)) / double(min(a, b));
        if (k >= 2) z = min(a, b);
        else if (k != 1) z = min(a, b) / 2;
        else return a;
        f = false; //включатель off
    }
 
    if ((a%c == 0) && (b%c == 0))
    {
        Max = c;
        c++;
        NOD(a, b, c);
    }
    else
    {
        if (c > z) return Max;
        c++;
        NOD(a, b, c);
    }
}
Буду очень благодарен тем людям, которые все же нашли время на мои кракозябры. Спасибо!
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2017, 18:58
Ответы с готовыми решениями:

Как еще можно упростить <img>?
Добрый день! Как можно еще &quot;упростить&quot; код, чтобы он был менее громоздским d файле index.php? ...

Можно ли как-то еще упростить этот код?
import re def exc(n,nekorr,j): try: n=int(n) if n&lt;1: raise ValueError else:return n...

Нужно упростить поиск наибольшего общего делителя (НОД)
Нужно написать функцию, вычисляющую наибольший общий делитель чисел a и b. Сделать это нужно...

ftp и пинг а еще нод 4
На моей машине установлен &quot;nod 4 с фаерволом&quot; и ftp сервер, и радмин, но пока не о нем. Вобщем с...

5
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11032 / 6984 / 1651
Регистрация: 25.07.2009
Сообщений: 12,739
04.08.2017, 19:44 2
Лучший ответ Сообщение было отмечено Nadzor как решение

Решение

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
 
unsigned nod_ab(unsigned a, unsigned b) {
    return ( b ) ? nod_ab(b, a % b) : a;
}
 
unsigned nod_abc(unsigned a, unsigned b, unsigned c) {
    return nod_ab(a, nod_ab(b, c));
}
 
int main() {
    unsigned a, b, c;
    
    while ( std::cout << "Three space separated numbers: " && std::cin >> a >> b >> c )
        std::cout << "NOD: " << nod_abc(a, b, c) << std::endl;
    
    return 0;
}
2
С чаем беда...
Эксперт CЭксперт С++
9166 / 4682 / 1271
Регистрация: 18.10.2014
Сообщений: 10,601
04.08.2017, 20:22 3
Цитата Сообщение от Nadzor Посмотреть сообщение
C++
1
2
double k;
k = double(max(a, b)) / double(min(a, b));
Что это??? Откуда и зачем тут взялся double???
1
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 167
04.08.2017, 21:24  [ТС] 4
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что это??? Откуда и зачем тут взялся double???
А как еще? С помощью переменной k, я нахожу отношение числа к числу и рассматриваю три случая: когда a/b>=2 или q/b<2 или q/b==1

Добавлено через 6 минут
Цитата Сообщение от easybudda Посмотреть сообщение
unsigned nod_ab(unsigned a, unsigned b) {
* * return ( b ) ? nod_ab(b, a % b) : a;
Мда... Стыдно мне, что код который я писал, можно заменить кодом в две строки.. Спасибо за гениальный ответ!

Добавлено через 2 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
return ( b ) ? nod_ab(b, a % b) : a;
Не постесняюсь спросить: какую роль играет
C++
1
?
и
C++
1
:
Ни разу не встречал подобный синтаксис, по крайней мере в видеоуроках (книги не читаю, так как боюсь испугаться содержания и бросить)..
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11032 / 6984 / 1651
Регистрация: 25.07.2009
Сообщений: 12,739
04.08.2017, 22:04 5
Лучший ответ Сообщение было отмечено Nadzor как решение

Решение

Цитата Сообщение от Nadzor Посмотреть сообщение
Не постесняюсь спросить
Это правильно, не стесняйтесь - форумы как-раз для этого!
Тренарный оператор - сокращённая форма if/else
C++
1
a = ( логическое_выражение ) ? значение_если_выражение_истинно : значение_если_выражение_ложно;
1
7 / 7 / 1
Регистрация: 14.08.2014
Сообщений: 167
04.08.2017, 22:55  [ТС] 6
Цитата Сообщение от easybudda Посмотреть сообщение
Это правильно, не стесняйтесь - форумы как-раз для этого!
Тренарный оператор - сокращённая форма if/else
C++Выделить код
1
a = ( логическое_выражение ) ? значение_если_выражение_истинно : значение_если_выражение_ложно;
Спасибо огромное. Возьму на заметку. Теперь все прекрасно понятно
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2017, 22:55

Найти НОД трёх чисел. Примечание. НОД(a,b,c)=НОД(НОД(a,b),c).
Кто может решить данную задачку (составить программу с помощью циклов)))) заранее спасибо)) Найти...

Даны n натуральных чисел. Найти их наибольший общий делитель, учитывая что НОД(а,б,с)=НОД(НОД(а,б)с)
даны n натуральных чисел. Найти их наибольший общий делитель, учитывая, что НОД(a,b,c) = НОД...

Какими ещё способами можно ещё сделать?
Задание: Известно, что: 1 в третей степени будет=1 2 в третей степени будет=3+5 3 в третей...

Найти наибольший общий делитель чисел M и N. Используйте теорему Эйлера: Если M делится на N, то НОД (N, M)=N, иначе НОД (N, M)= =НОД (M mod N, N).
Найти наибольший общий делитель чисел M и N. Используйте теорему Эйлера: Если M делится на N, то...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

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