Jump to content
Sign in to follow this  
KoSmO1423

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

Recommended Posts

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.

Share this post


Link to post

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

  • Like 1
  • Love 1

Share this post


Link to post

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]

Edited by KoSmO1423

Share this post


Link to post
#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;
}

 

  • Like 2

Share this post


Link to post

Wyskakują mi takie błędy 

|12|error: expected unqualified-id before 'int'|

|12|error: expected ';' before 'int'|

|12|error: 'i' was not declared in this scope|

|12|error: 'j' was not declared in this scope|

Share this post


Link to post

Poprawiłem. Teraz działa.

  • Love 1

Share this post


Link to post

@-n3veR niestety pokazuje teraz [5;2][2;5] nie pokazuje pary [4;1]

Share this post


Link to post

@KoSmO1423 zależy jak zdefiniujesz słowo 'para'. Bo tego nie podałeś. Chcesz porównać pierwszy element z resztą, drugi element z resztą, itd.?

Share this post


Link to post

@-n3veR każda para z tablicy której różnica będzie wynosiła 3, czyli w tej tablicy powinny być 2 pary [5,2] oraz [4,1]

Share this post


Link to post

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ć

  • Like 1
  • Love 1

Share this post


Link to post

@-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);
}

 

Share this post


Link to post

@-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;
}

 

  • Like 1
  • Thanks! 1

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Create a New Account. It’s free and easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
×
×
  • Create New...