杭電OJ(HDOJ)1032題:The 3 n+1 problem(貧挙、水題)


タイトル:
次のようなアルゴリズムがあります.
1. input n
2. print n
3 .if n==1 then STOP
4.  if n is odd n<-3*n+1
5.  else n-6.GOTO 2
22が入力された場合、22 11 34 17 52 26 13 40 20 10 5 16 8 4 1、長さ16、入力iとj、出力[i,j]の間の数字から算出されたシーケンス長が最も長いシーケンス長がある.入力時i,jの順にi,jと最長のシーケンス長を出力することが要求される.
入力例:
1 10
100 200
201 210
900 1000
出力例:
1 10 20
100 200 125
201 210 89
900 1000 174
ソリューション:
問題は難しくなく、英語を読めばいいのですが、不注意で多くの間違いを犯し、多くの時間を浪費して、もったいないです.残念ですが、書いてから注意してください.
#include<stdio.h>
#include<algorithm>
using namespace std;
int arr[1000000];
int Counter(int n)
{
    int cnt=1;
    while(n!=1)
    {
        n&1?n=3*n+1:n/=2;//            
        cnt++;
    }
    return cnt;
}
int main()
{
    int i,j,k,max,min;
    while(scanf("%d%d",&i,&j)!=EOF)
    {
        i>j?(max=i,min=j):(max=j,min=i);//        
        for(k=0;k<=max-min;k++)
            arr[k]=Counter(k+min);
        sort(arr,arr+k);
        printf("%d %d %d
",i,j,arr[max-min]); } }