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; }