środa, 21 lutego 2018

00027 - 708 - Problem Collatza - www.pl.spoj.com

Treść zadania:

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