3n+1

地址:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=36 如果你是奇数,n=3n+1;偶数,n=n/2; 硬推;

#include<stdio.h>

int arr[100001];

int main()

{    

int a,b;   

int i;  

   arr[1]=1;   

  arr[2]=2;    

for(i=3;i<10001;i++)   

  {     long long temp=i;

    int cnt=0;  

   while(temp!=1)

    {    

if(temp%2!=0)     {

    temp*=3;   

  temp+=1;    

cnt++;

}    

else   

  {cnt++;  

   temp>>=1; }

if(temp<i){

arr[i]=cnt+arr[temp];

这是规律,网上查的,原以为硬来不行 break;}

} }

int t;

while(scanf("%d%d",&a,&b)==2)

{if(a>b) {

t=a; a=b;  b=t;  }

 int max=0;

 for(i=a;i<=b;i++)  {

 if(max<arr[i])  {

 max=arr[i];}  }

printf("%d %d %d\n",a,b,max);

} return 0;

}  3n+1

#include<stdio.h>

int main(){

int i,j,q,t,max,k,p,flag;

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

{   //输入两个数都成功//

max=0;

flag=1;

if(i>j) {

q=i;

i=j;

j=q;

flag=0;}

  //当i>j时,i,j值交换//

for(k=i;k<=j;k++){

t=1; p=k;

while(p!=1){

if(p%2!=0) p=3*p+1;

else p/=2; t++;    //累计周期长度// }

if(max<t)

max=t;    //求出i到j范围内某个数的最大周期长度 // } if(flag)   printf("%d %d %d\n",i,j,max); else printf("%d %d %d\n",j,i,max); } return 0; }

posted @ 2013-02-28 18:35  L kill  阅读(135)  评论(0编辑  收藏  举报