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ć: #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; }
|
|
Brunon3 |
» 2015-03-14 23:21:02 Witaj na forum! ;)
Daj kod w znaczniki [cpp] KOD [/cpp].
-BD. |
|
aksen |
» 2015-03-15 00:00:57 Nie powinieneś pytać o "n" bo to ilość elementów tablicy (u Ciebie 10). |
|
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. |
|
aksen |
» 2015-03-15 00:30:46 #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; } } cout << "nie istnieje" << endl; }
int main() { cout << "podaj x" << endl; cin >> x; szukaj( x, n ); return 0; }
|
|
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? |
|
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. 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: if( suma( x, n ) ) cout << "istnieje a+b = x"; else cout << "nie istnieje";
|
|
« 1 » |