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

Ciąg odejmujący i suma

Ostatnio zmodyfikowano 2017-09-15 22:40
Autor Wiadomość
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???????????????????????????????
C/C++
#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;
}
P-164880
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.
P-164890
Beginner777
Temat założony przez niniejszego użytkownika
» 2017-09-14 22:57:55
C/C++
#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;
}
P-164893
Kinexity
» 2017-09-15 00:42:23
Czas na nieco matematycznej magii:
C/C++
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 ;)
P-164900
Beginner777
Temat założony przez niniejszego użytkownika
» 2017-09-15 02:20:50
nieźle sam bym na to nie wpadł
P-164901
Kinexity
» 2017-09-15 06:52:56
A sprawdziłeś, czy działa?
P-164903
Beginner777
Temat założony przez niniejszego użytkownika
» 2017-09-15 20:46:54
według mnie działa
P-164932
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
P-164934
« 1 » 2
  Strona 1 z 2 Następna strona