POJ 1207 3N+1 Problem

更简单的水题,穷举法即可。

需要注意的点:

1.i 和 j的大小关系不确定,即有可能 i>j

2.即使i>j,最后输出的结果也要严格按照输出,亦即如果输入10,1,则对应输出也应为 10 1 20而不是1 10 20

代码如下:

 1 /* 
 2  * File:   1207.h
 3  * Author: chrischeng021 <chrischeng021@gmail.com>
 4  *
 5  * Created on July 9, 2015, 5:07 PM
 6  */
 7 
 8 #ifndef _1207_H
 9 #define    _1207_H
10 
11 int calculate(int n){
12     int count = 1;
13     while(n != 1){
14         n = (n%2 == 0 ? n/2 : 3*n+1);
15         count++;
16     }
17     return count;
18 }
19 
20 void process(){
21     int i,j,k,ret,tmp,left,right;
22     while(scanf("%d%d",&i, &j) != EOF && i > 0){
23         ret = 0;
24         if(i < j){
25             left = i;
26             right = j;
27         }
28         else{
29             left = j;
30             right = i;
31         }
32         for(k = left;k <= right;k++){
33             tmp = calculate(k);
34             ret = ret > tmp ? ret : tmp;
35         }
36         printf("%d %d %d
",i, j, ret);
37     }
38 }
39 #endif    
40 /* _1207_H */