Algoritmo 3n+1 (Maratona de Programação)

Olá, abaixo encontra-se um dos problemas comuns de maratona de programação, dos mais conhecidos, escrito em C++.

#include <iostream>
using namespace std;

/* Pega o tamanho de um ciclo*/
int getOneCicle(int n){
   int oneCicle=0;
   while(oneCicle++,n != 1){
      if(n % 2)
         n = 3*n +1;
      else
         n = n/2;
   }
   return oneCicle;
}

/* Dado dois numeros pega o maior ciclo existente entre estes dois numeros*/
int getGreaterCile(int i , int j){
   int greaterCicle=0,oneCicle=0;

   while(i <= j){
      oneCicle = getOneCicle(i);
      if(oneCicle > greaterCicle)
         greaterCicle = oneCicle;
      i++;
   }

   return greaterCicle;
}

int main(){
   int i,j,greaterCicle;

   while(scanf("%d %d",&i,&j) == 2){

      greaterCicle= i<j ? getGreaterCile(i,j):getGreaterCile(j,i);

      /*saida*/
      printf("%d %d %d\n",i,j,greaterCicle);
   }

   return 0;
}
Compartilhe:
  • Print
  • Digg
  • del.icio.us
  • Facebook
  • Google Bookmarks
  • email
  • FriendFeed
  • LinkedIn
  • Live
  • MySpace
  • PDF
  • Rec6
  • Reddit
  • RSS
  • Slashdot
  • StumbleUpon
  • Technorati
  • Twitter
  • Yahoo! Bookmarks
  • Identi.ca
  • Netvibes
  • Tumblr
  • blogmarks
  • Posterous
  • Yahoo! Buzz

Posts relacionados:

  1. Algoritmo: Boliche
  2. Alguns algoritmos da Regional da Maratona da ACM 2007
  3. Algoritmo: Números de Ka Fu
  4. Algoritmo: O imperador Lu Zhin Du
  5. Regional da Maratona de Programação ACM (Cascavel-Pr)

Tags: ,

This entry was posted on sábado, outubro 25th, 2008 at 9:00 and is filed under algoritmos. You can follow any responses to this entry through the RSS 2.0 feed. Both comments and pings are currently closed.

Comments are closed.