Skocz do zawartości
Pecetowicz Forum komputerowe

C++ znajdź pary, których różnica jest równa liczbie k


Rekomendowane odpowiedzi

Witam. Mam takie zdanie z C++ "Dla zadanej tablicy liczb całkowitych znajdź te pary, których różnica jest równa zadanej liczbie k."

I mój problem polega na tym, że nie wiem jak do tego podejść. Czy byłby ktoś w stanie pomóc? Myślę, że to trzeba zdefiniować tablicę tylko teraz nwm czy statyczną czy dynamiczną oraz liczbę K i jakoś to w pętli, ale niestety nie mam pojęcia jak.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Definiujesz tablicę `x` na np. 10 elementów. Pewnie może być z użyciem `random()`, choć na początek proponuję statyczne liczby;

Przyjmujesz `k` od użytkownika - musisz sprawdzić czy wpisana wartość na 100% jest liczbą;

Odpalasz pętlę po tablicy. Wg mnie 'para', to element 0-1, 1-2, 2-3 itd. - choć mogę się mylić;

No i wewnątrz odejmujesz absolutnie, różnicę porównujesz do tego co wprowadził user i tyle

Przydatne instrukcje: for()sizeof()abs().

PS. Jak przyjdziesz już z zaczętym kodem, to coś podziałamy by działało

  • Lubię to! 1
  • Super 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Zrobiłem na statycznych liczbach i wypisuje mi wszystko, ale jak mam np kilka takich samych par liczb to mi je wypisuje a chciałbym aby było bez powtórzeń.
 

using namespace std;
int main()
{  int i=0;
    int k=3;
    int j;
    int tab[]={1,5,2,2,2,5,5,4};
    while(tab[i]<7)
    { i++;
         for(j=0;j<7;j++){
        if((tab[i]-tab[j]==k))
            {cout<<"["<<tab[i]<<","<<tab[j]<<"]";}}
    }
    return (0);
}

 A ma zwracać tak:

Wejście: A[] = [1, 5, 2, 2, 2, 5, 5, 4] 

k = 3

Wyjście: [2,5] oraz [1,4]

Edytowane przez ferNx
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
#include <iostream>

using namespace std;

int main()
{
    int i = 0;
    int j = i + 1;
    int k = 3;
    int tab[] = {1, 5, 2, 2, 2, 5, 5, 4};
    int arrSize = sizeof(tab) / sizeof(tab[0]);
    
    for ( ; j < arrSize; i++, j++) {
        int diff = abs(tab[i] - tab[j]);
        
        if (diff != k) {
            continue;
        }
        
        cout << "Pairs: [" << tab[i] << "; " << tab[j] << "]" << endl;
    }
    
    return 0;
}
  • Lubię to! 2
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

To tu jest już większa rozkmina...

  • W pętli trzeba zapamiętać i pogrupować jedynie indexy;
  • Trzeba napisać osobną funkcję, która sprawdzi czy nowe indexy są już w parze, bo tutaj index 0 - 1 to to samo do 1 - 0;
  • Jeżeli są, to trzeba pominąć 'dodawanie';
  • Na samym końcu wyświetlić pary.

Może będę mieć większą chwilę później, to spróbujemy powalczyć

  • Lubię to! 1
  • Super 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

@-n3veR w tym kodzie pokazuje mi dobre wyniki ale są powtórzenia.

using namespace std;
int main()
{  int i=0;
    int j;
    int k=3;
    int tab[]={1,5,2,2,2,5,5,4};


    while(i<=7)
    {
         for(j=i+1;j<=7;j++){
        if((tab[i]-tab[j]==k)||(tab[j]-tab[i]==k))
            {cout<<"["<<tab[i]<<","<<tab[j]<<"]";
            }}
        i++;
    }
    return (0);
}
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • 3 tygodnie później...

@-n3veR

Jeśli byłbyś zainteresowany to zrobiłem to tak.

using namespace std;


void funkcja(int tablica[], int roztab, int k) {
    fstream output;
    output.open("roznica.txt",ios::out);
    int i,j;
    map<int, int>m;
        for(i = 0; i < roztab; i++) {
            for(j = 0; j < roztab; j++) {
                if( tablica[i] - tablica[j] == k){ 
                m[tablica[j]] = tablica[i];
                }
            }
        }
    for (auto const& x : m)
        {
        cout <<"Pary liczb spelniajacych warunek: "<< "["<< x.first<< ":"<< x.second << "]"<<endl;
        output <<"Pary liczb spelniajacych warunek: "<<"["<< x.first<< ":"<< x.second << "]"<<endl;
        }
    output.close();
}

int main()
{

	int roztab, k;
	cout << "podaj ilosc liczb w tablicy: ";
    cin >> roztab;
    cout << "podaj roznice: ";
    cin >> k;
    int tablica[roztab];

    for (int j=0; j<roztab; j++) { 
        cout << endl << "podaj kolejne liczby w tablicy: ";
        cin >> tablica[j];
	}
	funkcja(tablica, roztab, k);


    return 0;
}
  • Lubię to! 1
  • Dzięki! 1
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
×
×
  • Dodaj nową pozycję...