Advertisement
Guest User

maj 2019 4.3

a guest
Apr 9th, 2020
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <sstream>
  4. #include <string>
  5. #include <vector>
  6.  
  7. using namespace std;
  8.  
  9. unsigned int nwd(unsigned int a, unsigned int b) {
  10.     while( a!=b ) {
  11.         if( a>b ) a-=b;
  12.         else b-=a;
  13.     }
  14.     return a;
  15. }
  16.  
  17. int main()
  18. {
  19.     unsigned int pierwsza_wartosc=0, rekord_nwd=0, poczatek=0, koniec=1, rekord_dlugosci=0;
  20.  
  21.     ifstream plik("liczby.txt");
  22.     vector<unsigned int> ciag_liczb;
  23.     if( plik.is_open() ) {  //zapelnij wektor liczbami
  24.         while( !plik.eof() ) {
  25.             string linia;
  26.             getline(plik,linia);
  27.             unsigned int liczba;
  28.             istringstream(linia) >> liczba;
  29.             ciag_liczb.push_back(liczba);
  30.         }
  31.     }
  32.     plik.close();
  33.  
  34.     while( koniec!=ciag_liczb.size()-1 ) { //Wykonoj dopoki nie dotarto do konca
  35.         unsigned int temp_rekord_nwd=0, temp_nwd=ciag_liczb[poczatek];
  36.         for( unsigned int a=poczatek; a<=koniec; a++ ) { //wylicz nwd z zakresu do temp_nwd
  37.             temp_nwd=nwd(temp_nwd, ciag_liczb[a]);
  38.             if( temp_nwd>1 && poczatek!=a ) temp_rekord_nwd=temp_nwd;
  39.         }
  40.  
  41.         if( temp_nwd>1 ) {//jezeli nwd porownywanego ciagu wieksze od 1, poszerz zakres
  42.             if( koniec-poczatek>rekord_dlugosci ) { //Przy okazji sprawdz czy zaktualizowac rekord
  43.                 rekord_dlugosci=koniec-poczatek;
  44.                 pierwsza_wartosc=ciag_liczb[poczatek];
  45.                 rekord_nwd=temp_rekord_nwd;
  46.             }
  47.             koniec++;
  48.         }
  49.         else {   //W przeciwnym razie zacznij przesowac zakres naprzod
  50.             poczatek++;
  51.             koniec=poczatek+1;
  52.         }
  53.     }
  54.  
  55.     cout << "Pierwsza wartosc: " << pierwsza_wartosc << ", Dlugosc ciagu: " << rekord_dlugosci+1 << ", Najwyzsza wartosc NWD: " << rekord_nwd << "." << endl;
  56.     return 0;
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement