2016-11-12 3 views
0

현재 Collatz 추측에 관한 문제를 해결하려고합니다. 문제의 이미지를 첨부해야합니다.가장 많은 양의 용어로 Collatz 시퀀스 찾기

Question (from ProjectEuler)

이제 문제는 분명히 1과 100 사이의 상태. 그러나 사용자가 시작 지점과 끝 지점을 선택해야하는 기능을 추가했습니다. 나는 문제가 생겼지 만. (사전 프로그래밍 경험이없는 1 학년 CS 학생으로서 현재 나의 지식은 매우 제한적입니다.)

가장 높은 시퀀스 또는 가장 높은 'loopCount'를 찾는 방법에 대한 나의 생각은 해당 루프 카운트가있는 숫자를 배열로 밀어 넣고 해당 배열에서 최대 루프 카운트 값을 찾으려 고합니다. 그러나 내가 염려하는 한 2 차원 배열이 필요합니다.

제가 말했듯이, 프로그래밍 기술은 제한되어 있습니다 (아직 배열은 다루지 않았습니다). 그래서 시작하는 법을 알지 못합니다. 여기

는 지금까지이 작업은 다음과 같습니다
System.out.println("Enter starting point:"); 
    Scanner userStartingPoint = new Scanner(System.in); 
    long startingPoint = userStartingPoint.nextInt(); 

    System.out.println("Enter ending point:"); 
    Scanner userEndingPoint = new Scanner(System.in); 
    long endingPoint = userEndingPoint.nextInt(); 

    long timeBefore = System.currentTimeMillis(); 
    int loopCount; 

    for(long i = startingPoint; i <= endingPoint; i++) { 

     long number = i; 
     loopCount = 1; 

     while(number != 1) { 
      if(number%2 == 0) { 
       number = number/2; 
      } else if(number%2 != 0) { 
       number = (3*number)+1; 
      } 
      loopCount++; 
     } 

     System.out.println("Number: " + i + ". " + "Loop count: " + loopCount + "."); 
    } 

    long timeAfter = System.currentTimeMillis(); 
    long timeTaken = timeAfter - timeBefore; 
    System.out.println(endingPoint - startingPoint + " sequences."); 
    System.out.println("Time taken: " + timeTaken/1000 + " seconds."); 

내가 여기 많은 변수에 대한 데이터 유형으로 '긴'를 사용 나는 몇 가지 숫자 금액 이상 갈 반복이 있음을 발견했기 때문에 그 'int'데이터 형식을 처리 할 수 ​​있습니다.

답변

0

추가 변수에 가장 높은 loopCount를 저장하고 증가 할 경우마다 반복 할 때마다 업데이트하십시오.

int maxCount = 0; 
int loopCount; 

for(long i = startingPoint; i <= endingPoint; i++) { 

    long number = i; 
    loopCount = 1; 

    while(number != 1) { 
     if(number%2 == 0) { 
      number = number/2; 
     } else if(number%2 != 0) { 
      number = (3*number)+1; 
     } 
     loopCount++; 
    } 
    if(loopCount > maxCount){ 
     maxCount = loopCount; 
    } 
    System.out.println("Number: " + i + ". " + "Loop count: " + loopCount + "."); 
} 
System.out.println("Highest loopCount : " + maxCount); 
+0

얼마나 당황 스럽습니까! 그것은 확실히 그것에 대해가는 훨씬 간단한 방법입니다. 고맙습니다 – E13

관련 문제