Beginner777 Temat założony przez niniejszego użytkownika |
Ciąg odejmujący i suma » 2017-09-14 20:42:17 1. Napisz program pobierający od użytkownika liczbę całkowitą R (R>1) i liczbę rzeczywistą dodatnią S, a następnie informujący ile kolejnych liczb z ciągu 1, R-1, R2 -2, R3 -3, R4 -4, … należy dodać, aby otrzymać liczbę nie mniejszą niż S, ale koniecznie nieparzystą, oraz o ile wynik tego dodawania będzie większy od S. Dla R=2 ciąg przyjmuje postać 1, 1, 2, 5, 12, 27, …, więc sumy kolejnych wartości tworzą ciąg 1, 2, 4, 9, 21, 48, … Przykłady: • dla R=2 i S=9 otrzymamy wynik: liczb: 4, wynik rowny • dla R=3 i S=30.5 otrzymamy wynik: liczb: 5, wynik wiekszy o 80.5 Co robię nie tak??????????????????????????????? #include <iostream>
using namespace std;
int main() { int r; int s; cout << "r:"; cin >> r; cout << "Podaj s:" << endl; cin >> s; int ilosc = 0; int liczba = 1; int suma = 0; do { for( int i = r; i <= 100; i++ ) suma += r - liczba; liczba++; ilosc++; } while( suma >= s ); cout << "Suma" << " " << 1 + ilosc; return 0; }
|
|
Luq |
» 2017-09-14 22:22:53 Typ int raczej średnio się nadaje do przechowywania liczb rzeczywistych. Co do twojego algorytmu to nie ma on za bardzo sensu. |
|
Beginner777 Temat założony przez niniejszego użytkownika |
» 2017-09-14 22:57:55 #include <iostream>
using namespace std;
int main() { int r; int s; cout << "r:"; cin >> r; cout << "Podaj s:" << endl; cin >> s; int ilosc = 0; int liczba = 1; int suma = 0; do { suma += r - liczba; liczba++; r *= r; ilosc++; } while( suma >= s ); cout << "Suma" << " " << 1 + ilosc; return 0; }
|
|
Kinexity |
» 2017-09-15 00:42:23 Czas na nieco matematycznej magii: unsigned long long n = 1 + ceil( sqrt( 2 *( s - 1 ) /( r - 1 ) - 0.25 ) - 0.5 ); ilosc = n +((( 1 +( 1 + n ) * n *( r - 1 ) / 2 ) % 2 != 0 ) ? 0 : 1 );
Jeżeli nigdzie nie popełniłem błędu, to gdy wstawisz ten kod zamiast pętli, to obliczy on prawidłowy wynik. Wytłumaczenie wrzucę jutro... znaczy się dzisiaj ale nie teraz ;) |
|
Beginner777 Temat założony przez niniejszego użytkownika |
» 2017-09-15 02:20:50 nieźle sam bym na to nie wpadł |
|
Kinexity |
» 2017-09-15 06:52:56 A sprawdziłeś, czy działa? |
|
Beginner777 Temat założony przez niniejszego użytkownika |
» 2017-09-15 20:46:54 według mnie działa |
|
mateczek |
» 2017-09-15 21:48:47 Dla R=2 ciąg przyjmuje postać 1, 1, 2, 5, 12, 27
|
n - kolejne liczby naturalne: n*R-n=n(R-1)=n(2-1)=n; jak dla mnie ciąg przyjmuje postać 1 1 2 3 4 5 6 7 8 9 10 i jest to zwykły ciąg arytmetyczny |
|
« 1 » 2 |