PKU 1207 The 3n + 1 problem

题目大意 : 输入两个数,输出两数之间计算3n+1步数最大的数.
注意 : 输入的两个数不一定是小的数在前面大的数在后面(一个Wrong Answer...)
首先,想都不用想就蛮力计算.每个case单独计算(15ms)
后来发现测试数据实在太小(0到10000).就预处理了一下(0ms)哈哈.
ps : 最近poj的c++标准改了.main函数没返回值会错(贡献一个compile error...)
#include<iostream> using namespace std; int a[10002]; int main() { long count; long i,j;bool b=0; for(long k=1;k<=10000;k++)//预处理1到10000的结果 { count=1; long n=k; while(n!=1) { if(n%2)n=3*n+1; else n/=2; count++; } a[k] = count; } while(cin>>i>>j) { long sum=0;if(i>j){int temp=i;i=j;j=temp;b=1;} for(int k=i;k<=j;k++) { if(sum<a[k])sum=a[k];//直接找出两个数之间最大的步数就行了. } if(b){int temp=i;i=j;j=temp;b=1;} cout<<i<<' '<<j<<' '<<sum<<endl; } return 0; }

你可能感兴趣的:(PKU 1207 The 3n + 1 problem)