Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Suma elementów ciągów

Ostatnio zmodyfikowano 2015-03-15 14:00
Autor Wiadomość
Evti
Temat założony przez niniejszego użytkownika
Suma elementów ciągów
» 2015-03-14 23:19:04
Witam mam problem z moim programem.
Mam podane:
 Dwie liczby naturalne n i x oraz dwa ciągi liczb naturalnych A=(a 1 ,a 2 ,...,a n) i B=(b 1 ,b 2 ,...,b n ) uporządkowane niemalejąco.
Za zadanie mam sprawdzić:
 Czy istnieje Czy istnieje a nalezace do A i b nalezace do B, że a + b = x?

Niestety program który napisałem zawsze zwraca mi odpowiedź ze nie istnieją takie liczby.

Narazie jedyne co udało mi sie na sztywno napisać:
C/C++
#include<iostream>
using namespace std;

int x, n;
int A[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int B[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };

bool suma( int a, int b ) {
   
    int i = 1;
    int j = b;
    while( i <= b && j > 0 ) {
        if( A[ i ] + B[ j ] == a ) return true;
        else if( A[ i ] + B[ j ] < a ) i = i + 1;
        else j = j - 1;
       
        return false;
    }
}

int main() {
    cout << "podaj x" << endl;
    cin >> x;
    cout << "podaj n" << endl;
    cin >> n;
    if( suma( x, n ) == true ) {
        cout << "istnieje a+b = x";
    }
    else if( suma( x, n ) == false ) {
        cout << "nie istnieje";
    }
    return 0;
}
P-128422
Brunon3
» 2015-03-14 23:21:02
Witaj na forum! ;)

Daj kod w znaczniki [cpp] KOD [/cpp].

-BD.
P-128423
aksen
» 2015-03-15 00:00:57
Nie powinieneś pytać o "n" bo to ilość elementów tablicy (u Ciebie 10).
P-128435
Evti
Temat założony przez niniejszego użytkownika
» 2015-03-15 00:09:41
Jak napisałem wcześniej, zrobiłem to na sztywno na razie. Później chciałbym zeby było n randomowych liczb.
P-128438
aksen
» 2015-03-15 00:30:46
C/C++
#include<iostream>
using namespace std;

int x;
int A[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
int B[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
const int n = sizeof( A ) / sizeof( int );


void szukaj( int x, int n )
{
    int s;
   
    for( int i = 0; i < n; i++ )
    {
        for( int j = 0; j < n; j++ )
        {
            s = A[ i ] + B[ j ];
            if( s == x )
            {
                cout << x << "=" << A[ i ] << "+" << B[ j ] << endl;
                return;
            }
            else if( s > x )
                 break; // przerywamy petle i bierzemy nastepne "i"
           
        }
    }
    cout << "nie istnieje" << endl;
}

int main() {
   
    cout << "podaj x" << endl;
    cin >> x;
   
    szukaj( x, n );
   
    //system( "pause" );
    return 0;
}
P-128439
Evti
Temat założony przez niniejszego użytkownika
» 2015-03-15 13:38:52
Dobrze, wiec mógłby ktoś wyjaśnić co było złego w moim podejsciu?
P-128458
aksen
» 2015-03-15 14:00:45
Wypisz sobie (przez cout), które elementy tablicy A i B sprawdzasz w pętli while.
Potem analizuj działanie programu.

C/C++
while( i <= b && j > 0 ) {
    cout << i << "," << j << endl;
    if( A[ i ] + B[ j ] == a ) return true;
   

Po co 2 razy wywołujesz funkcję suma?
Wystarczy wywołać raz:

C/C++
if( suma( x, n ) )
     cout << "istnieje a+b = x";
else
     cout << "nie istnieje";

P-128461
« 1 »
  Strona 1 z 1