Dany jest ciąg xn określony rekurencyjnie:
x0=s,
xn+1=3*xn+1, jeśli xn jest nieparzyste i
xn+1=xn/2, jeśli xn jest parzyste
Napisz program, który oblicza pierwsze takie n, dla którego xn=1.
Wejście
W pierwszej linii liczba testów t. W każdym z t kolejnych wierszy
jedna liczba całkowita s, 1 <= s <= 10000.
Wyjście
W każdej linii jedna liczba - obliczona wartość n.
Przykład
Wejście:
5
1
2
8
3
567
Wyjście:
0
1
3
7
61
Kod źródłowy w C:
#include <stdio.h> #include <stdlib.h> int main() { int t, s, c; scanf("%d",&t); while(t--) { scanf("%d",&s); c=0; for(;;) { if(s==1) { break; } ++c; if(s%2==0) { s=s/2; } else { s=(3*s)+1; } } printf("%d\n",c); } return 0; }
Kod źródło w C++:
#include <iostream> using namespace std; int main() { int t, s, c; cin>>t; while(t--) { cin>>s; c=0; for(;;) { if(s==1) { break; } ++c; if(s%2==0) { s=s/2; } else { s=(3*s)+1; } } cout<<c<<endl; } return 0; }
Źródło: http://pl.spoj.com/problems/PTCLTZ/
Brak komentarzy:
Prześlij komentarz