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

Wyświetlaj tylko pierwszą wspólną liczbę

+1 głos
120 wizyt
pytanie zadane 3 września 2020 w C i C++ przez mccarol Nowicjusz (240 p.)
edycja 3 września 2020 przez mccarol

Witam!

Mam dwie proste tablice i znajduje w nich wspólne liczby - są takie dwie. Mój problem polega na tym, że chcę, by jako wynik pokazywała mi się tylko najmniejsza wspólna liczba. Proszę o pomoc, jak to zrobić.

Z góry dziękuję za wszystkie wskazówki.

#include <iostream>

using namespace std;
int tablicaX[5]={12, 18, 24, 30, 36};
int tablicaY[5]={18, 24, 32, 40, 48};

int main()
{
    for (int x=0;x<5;x++)
    {
        for (int y=0;y<5;y++)
        {
            if (tablicaX[x] == tablicaY[y])
                cout<<tablicaX[x]<<", ";
        }
    }

    return 0;
}

 

3 odpowiedzi

0 głosów
odpowiedź 3 września 2020 przez jankustosz1 Nałogowiec (30,160 p.)
W sensie chcesz zrobić break'a z dwóch pętli naraz? W tym przypadku wystarczy, że ustawisz x=5, y=5
komentarz 3 września 2020 przez jankustosz1 Nałogowiec (30,160 p.)

Btw. Tak się liczy NWW

int a = 6, b = 8;
int nww = a*b/__gcd(a, b);

 

komentarz 3 września 2020 przez Official gildin Bywalec (2,820 p.)
Pytający chce sprawdzić najmniejszą cyfrę / liczbę

 

ja bym to zrobił, że w pętli sprawdzam kolejne liczby z tablicy i jeżeli poprzednia jest mniejsza to przypisuje do nowej zmiennej
komentarz 3 września 2020 przez mccarol Nowicjusz (240 p.)
Ale gdzie wprowadzić takie ustawienie?
komentarz 3 września 2020 przez Official gildin Bywalec (2,820 p.)
do int'a?
komentarz 3 września 2020 przez mccarol Nowicjusz (240 p.)
Wprowadzenie:

int x=5;
int y=5;

przed funkcją main, niestety nic nie zmienia w wyniku - dalej pojawiają się dwie liczby. :-(
komentarz 3 września 2020 przez Official gildin Bywalec (2,820 p.)
Zrób w pętlę for to kiedy i = wielkość twojej tablicy i sprawdzaj po kolei każdą zmienną w tablicy, jeżeli poprzednia jest niższa od i to przypisz ją do nowej zmiennej
komentarz 3 września 2020 przez jankustosz1 Nałogowiec (30,160 p.)

@mccarol, Daj ifowi klamry i dodaj tam x=5;y=5;  Wtedy wyjedzie z obu pętli.

komentarz 3 września 2020 przez mccarol Nowicjusz (240 p.)

Rzeczywiście!!

Poszło i pokazuje teraz tylko pierwszą wspólną liczbę.

Wielkie dzięki.

#include <iostream>

using namespace std;
int tablicaX[5]={12, 18, 24, 30, 36};
int tablicaY[5]={18, 24, 32, 40, 48};

int main()
{
    for (int x=0;x<5;x++)
    {
        for (int y=0;y<5;y++)
        {
            if (tablicaX[x] == tablicaY[y])
            {
                cout<<tablicaX[x];
                x=5;
                y=5;
            }

        }
    }

    return 0;

 

komentarz 3 września 2020 przez kawapa Nowicjusz (210 p.)
Ale wiesz, że to zwróci prawidłowy wynik tylko dlatego, że tablice są posortowane?
komentarz 3 września 2020 przez mccarol Nowicjusz (240 p.)
Zgadza się. Funkcja dalej zwraca jedną wspólną liczbę, ale przez to, że liczby w tablicach nie są posortowane, to wynikiem nie jest najmniejsza wspólna liczba.
0 głosów
odpowiedź 3 września 2020 przez TOM_CPP Pasjonat (20,700 p.)

Dla nieposortowanych tablic, dobrym rozwiązaniem jest użyć kontenera std::multiset.

#include <iostream>
#include <set>

using namespace std;

int tablicaX[] {36, 18, 24, 30, 18};
int tablicaY[] {18, 24, 32, 40, 48};

int main()
{
    multiset<int> values {begin(tablicaX),end(tablicaX)};
    values.insert(begin(tablicaY),end(tablicaY));

    for( const auto& element : values )
    {
        if( values.count(element)>1 )
        {
            cout << "The lowest intersected element is " << element << endl;
            break;
        }
    }

    return 0;
}

 

0 głosów
odpowiedź 3 września 2020 przez VBService VIP (144,010 p.)
edycja 3 września 2020 przez VBService
#include <iostream>
#include <algorithm>
#include <vector>
 
using namespace std;
 
int tablicaX[] {36, 18, 24, 30, 33, 12, 45, 27};
int tablicaY[] {38, 24, 32, 12, 48, 17, 33, 18};

int s1 = sizeof(tablicaX) / sizeof(tablicaX[0]); 
int s2 = sizeof(tablicaY) / sizeof(tablicaY[0]);

int main()
{
  sort(tablicaX, tablicaX + s1); 
  sort(tablicaY, tablicaY + s2); 

  vector<int> common_numbers;

  for (int x=0; x<s1; ++x) {
      for (int y=0; y<s2; ++y) {
          if (tablicaX[x] == tablicaY[y])
              common_numbers.push_back(tablicaX[x]);
      }
  }
 
  int common_numbers_size = common_numbers.size();

  cout << "\nWspolne liczby to: ";
  for (int i=0; i<common_numbers_size; ++i)
      cout << common_numbers[i] << " ";

  cout << "\nNajmniejsza wspolna to: " << common_numbers[0];
  cout << "\nNajwieksza wspolna to: " << common_numbers[common_numbers_size-1] << endl;

  return 0;
}

Podobne pytania

86,448 zapytań

135,207 odpowiedzi

300,348 komentarzy

57,196 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...