• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

NWD Zadanie C++

Object Storage Arubacloud
0 głosów
684 wizyt
pytanie zadane 27 września 2021 w C i C++ przez polandonion Mądrala (7,040 p.)
edycja 29 września 2021 przez polandonion

Zadanie NWD kilku liczb


NWD dwóch liczb można obliczyć algorytmem Euklidesa. W jaki sposób wyznaczyć NWD wielu liczb? W pierwszym wierszu wejścia musi znaleźć się liczba całkowita n (1 < n < 10²), oznaczająca liczbę testów. Każdy z n-kolejnych wierszy zawiera jedną liczbę całkowitą p mniejszą niż miliard, kolejny wyraz ciągu, dla którego trzeba wyznaczyć NWD. Przyjmujemy, że wartości, z jakich chcemy policzyć NWD są liczbami całkowitymi.


Przykład #1

Dla danych:

3

12 20 16

poprawnym rozwiązaniem jest:

4

2 odpowiedzi

0 głosów
odpowiedź 27 września 2021 przez SzkolnyAdmin Szeryf (86,360 p.)
wybrane 6 października 2021 przez polandonion
 
Najlepsza
NWD(a, b, c) = NWD(NWD(a, b), c)

NWD(a, b, c, d) = NWD(NWD(a, b, c), d) = NWD(NWD(NWD(a, b), c), d)

I tak dalej dla większej liczby parametrów.
komentarz 27 września 2021 przez polandonion Mądrala (7,040 p.)
edycja 27 września 2021 przez polandonion
dzięki, sprobuje to zimplementowac w c++
komentarz 29 września 2021 przez polandonion Mądrala (7,040 p.)
udalo mi sie, dzieki:

#include<bits/stdc++.h>
using namespace std;
int nwd(long long a,long long b)
{
    while(a!=b)
    {
        if(a>b) a-=b;
        else b-=a;
    }
    return a;
}
int main()
{
    int ile; cin>>ile;
    long long a,b; cin>>a>>b;
    int gcd=nwd(a,b);
    for(int i=1; i<=ile-2; i++)
    {
        cin>>a;
        gcd=nwd(gcd,a);
    }
    cout<<gcd;
}
0 głosów
odpowiedź 28 września 2021 przez TOM_CPP Pasjonat (22,640 p.)

Przykład bez użycia rekurencji.

#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

auto findGCD( const vector<int>& numbers )
{
    auto result = *numbers.cbegin();
    for( const auto& number : numbers )
    {
        result = __gcd( number , result );
        if( result == 1 ) return 1;        
    }
    return result;
}

int main()
{    
    cout << findGCD( vector<int>{ 234,24,54,48 } ) << endl;    
}

https://godbolt.org/z/fejaqhP9E

 

 

komentarz 28 września 2021 przez tkz Nałogowiec (42,000 p.)

Podobne pytania

0 głosów
1 odpowiedź 264 wizyt
pytanie zadane 15 grudnia 2022 w SPOJ przez Pan_Blazej Nowicjusz (180 p.)
+1 głos
1 odpowiedź 1,169 wizyt
pytanie zadane 15 kwietnia 2018 w C i C++ przez Hikori Nowicjusz (180 p.)
0 głosów
1 odpowiedź 3,814 wizyt
pytanie zadane 3 kwietnia 2018 w C i C++ przez mietek_arduino Początkujący (330 p.)

92,563 zapytań

141,413 odpowiedzi

319,590 komentarzy

61,948 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...