###### tags: `UVa` - [x] check # UVa c039: 00100 The 3n + 1 problem :::info Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you will be analyzing a property of an algorithm whose classification is not known for all possible inputs. Consider the following algorithm: 1. 2. 3. 4. 5. 6. input n print n if n = 1 then STOP if n is odd then n ←− 3n + 1 else n ←− n/2 GOTO 2 Given the input 22, the following sequence of numbers will be printed 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1 It is conjectured that the algorithm above will terminate (when a 1 is printed) for any integral input value. Despite the simplicity of the algorithm, it is unknown whether this conjecture is true. It has been verified, however, for all integers n such that 0 < n < 1,000,000 (and, in fact, for many more numbers than this.) Given an input n, it is possible to determine the number of numbers printed before and including the 1 is printed. For a given n this is called the cycle-length of n. In the example above, the cycle length of 22 is 16. For any two numbers i and j you are to determine the maximum cycle length over all numbers between and including both i and j. 範例輸入 | Input 1 | Output 2 | | -------- | -------- | | 1 10 | 1 10 20 | | 10 1 | 10 1 20 | ::: ### 1st Ideas of solving a problem >1. >2. >3. >4. >5. >6. ```=c #include <stdio.h> int test(int,int); void swap(int*,int*); int main(){ int a,b; while(scanf("%d %d",&a,&b)!=EOF){ printf("%d",a); printf(" "); printf("%d",b); printf(" "); if(a>b){ swap(&a,&b); } printf("%d\n",test(a,b)); } return 0; } int test(int a,int b){ int i; int max=0; int temp; for(i=a;i<=b;i++){ temp=i; int count=1; while(temp!=1){ if(temp%2==1){ temp=3*temp+1; count++; } else{ temp=temp/2; count++; } } if(count>=max){ max=count; } } return max; } void swap(int*a,int*b){ int temp; temp=*a; *a=*b; *b=temp; } ```