Jump to content

Problema de Collatz


luispt
 Share

Recommended Posts

/**    Considere o seguinte problema de L. Collatz (1937): Dado um numero inteiro, n, se par, divida por dois; se for impar,

multiplique por 3 e some 1. Repita as operacoes anteriores e pare quando atingir 1. A sequencia de valores obtidos chama-se uma trajectoria.

Escreva um programa para determinar:

    a) a trajectoria de n e o respectivo comprimento d (a especificar pelo utilizador);

    b) o tempo de paragem t de n, definido como o numero de iteracoes necessarias para, partindo de n, atingir um inteiro menor que n.

(A conjectura de Collatz: e de que "t" e infinito para todo o n.)

**/

// 3n+1

int main ( )
{
    int n,d,seq=0;
    printf("\n\nIntroduza um num inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz: \n\n");
    scanf("%d",&n);
    printf("\nIntroduza um comprimento para a trajectoria: \n");
    scanf("%d",&d);
    printf("\n\nTrajectoria: \n");
        while(n!=1)
    {    if(n%2==0)
            n=n/2;
         else
            if(n%2!=0)
                n=(n*3)+1;
         printf("\n.%d\n",n);
         if(seq){
                printf("%d",n);
                seq=seq--;}
    }




  
    return 0;

}

cheguei a esse ponto e nao consigo mais desenvolver o algoritmo peço ajuda sff 🙂

Link to comment
Share on other sites

"a) a trajectoria de n e o respectivo comprimento d (a especificar pelo utilizador);

 b) o tempo de paragem t de n, definido como o numero de iteracoes necessarias para, partindo de n, atingir um inteiro menor que n.

(A conjectura de Collatz: e de que "t" e infinito para todo o n.)"

a) A trajectória são os números pelos quais passa a sucessão até chegar a 1, o comprimento é o tamanho dessa trajectória

b) A conjectura de Collatz é de que t é finito para todo o n e não infinito como tens aí.

Não respondo a dúvidas por mensagem.

Link to comment
Share on other sites

Resolvido:

alinea a)

int main()
{
   int n,d,i;
   printf("\n\nInsira um numero inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz:");
   scanf("%d",&n);
   printf("\nIntroduza um comprimento para a trajectoria:");
   scanf("%d",&d);
   i=0;
   while(n>1 && i<d)
   {  if(n%2==0)
           n=n/2;
       else
           n=3*n+1;
   printf("\nTrajectoria:  %d\n", n);
   i++;
   }
   return 0;
}

alinea b)

int main()
{
   int n,d,i,ninicial;
   printf("\n\nInsira um numero inteiro para tracar a trajectoria de acordo com o\nproblema de L.Collatz:");
   scanf("%d",&n);
   ninicial=n;
   i=0;
   while(n>=ninicial)
   {  if(n%2==0)
           n=n/2;
       else
           n=3*n+1;
   printf("\nTrajectoria:  %d\n", n);
   i++;
   }
   printf("\nO tempo de paragem e': %d", i);
  return 0;
}
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.