Project Euler Question 14 (Collatz Problem)

后端 未结 8 1917
清酒与你
清酒与你 2020-11-27 07:58

The following iterative sequence is defined for the set of positive integers:

n ->n/2 (n is even) n ->3n + 1 (n is odd)

Using the rule above and starting wit

8条回答
  •  臣服心动
    2020-11-27 08:26

    Fixing the unsigned int issue in the original question.

    Added array for storing pre-computed values.

    include                                                                                                                                      
    #define LIMIT 1000000
    
    unsigned int dp_array[LIMIT+1];
    
    unsigned int iteration(unsigned int value)
    {
     if(value%2==0)
      return (value/2);
     else
      return (3*value+1);
    }
    
    unsigned int count_iterations(unsigned int value)
    {
     int count=1;
     while(value!=1)
     {
     if ((value<=LIMIT) && (dp_array[value]!=0)){
       count+= (dp_array[value] -1);
       break;
      } else {
       value=iteration(value);
       count++;
      }
     }
     return count;
    }
    
    int main()
    {
     int iteration_count=0, max=0;
     int i,count;
     for(i=0;i<=LIMIT;i++){
      dp_array[i]=0;
     }
    
     for (i=1; imax)
       {
       max=iteration_count;
       count=i;
       }
    //  printf(" %d \n", max);
    
     }
    
     printf("Count = %d\ni = %d\n",max,count);
    
    }
    

    o/p: Count = 525 i = 837799

提交回复
热议问题