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

NWD Zadanie C++

Aruba Cloud VPS - 50% taniej przez 3 miesiące!
0 głosów
829 wizyt
pytanie zadane 27 września 2021 w C i C++ przez polandonion Dyskutant (7,560 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 (89,030 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 Dyskutant (7,560 p.)
edycja 27 września 2021 przez polandonion
dzięki, sprobuje to zimplementowac w c++
komentarz 29 września 2021 przez polandonion Dyskutant (7,560 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,020 p.)

Podobne pytania

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

93,187 zapytań

142,203 odpowiedzi

322,020 komentarzy

62,513 pasjonatów

Advent of Code 2024

Top 15 użytkowników

  1. 2365p. - dia-Chann
  2. 2326p. - Łukasz Piwowar
  3. 2315p. - Łukasz Eckert
  4. 2301p. - CC PL
  5. 2269p. - Tomasz Bielak
  6. 2235p. - Łukasz Siedlecki
  7. 2232p. - rucin93
  8. 2169p. - Marcin Putra
  9. 2164p. - Adrian Wieprzkowicz
  10. 2006p. - Michal Drewniak
  11. 1950p. - Anonim 3619784
  12. 1909p. - Dawid128
  13. 1901p. - Mikbac
  14. 1744p. - rafalszastok
  15. 1487p. - Michał Telesz
Szczegóły i pełne wyniki

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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...