2017-09-28 2 views
2
#include <stdio.h> 

int main() { 
    int rangeValue; 
    int x; 
    printf("Please input a number to be considered in the range:\n"); 
    scanf("%d", &rangeValue); 
    while (rangeValue != 1) { 
     x = rangeValue; 
     if ((x % 2) == 0) { 
      x = x/2; 
      printf("%d,", x); 
     } else { 
      x = (3 * x) + 1; 
      printf("%d,", x); 
     } 
     rangeValue--; 
    } 
    return 0; 
} 

내 목표는 1에서부터 rangeValue에 주어진 수까지 Collatz 시퀀스를 수행하는 것입니다. 나는 이것이 작동하기를 기대했다. 누구든지 나를 도와 줄 수 있습니까?Collatz 시퀀스 1에서 주어진 값까지

+0

https://ideone.com/Aerc5T 당신은 당신의 범위의 한계 (1)에서 계산 한 루프를 필요 –

+1

을; 이러한 각 값에 대해 Collatz 시퀀스를 결정하려면 내부 (중첩 된) 루프가 필요합니다. 새 값을 시작할 때 더 잘 식별하기 위해 인쇄를 향상시켜야합니다 (순서를 완료 한 후 개행 문자를 출력하십시오). 또는 전달 된 숫자에 대해 Collatz 시퀀스를 인쇄 한 다음 주 프로그램 호출을 사용하여 1..limit 범위의 각 값에 대해 함수를 작성하는 것이 좋습니다. 숫자 앞에 쉼표를 인쇄해야합니다. 첫 번째 쉼표를 제외하고는 쉼표를 인쇄해야합니다. 어쨌든 별도로 인쇄해야합니다. –

답변

1

인쇄 할 일련의 범위, 최대 반복 횟수 및 순서의 현재 수를 혼합합니다. 여기

는 코드를 수정하는 방법은 다음과 같습니다

#include <stdio.h> 

int main(void) { 
    int rangeValue; 
    printf("Please input a number to be considered in the range:\n"); 
    if (scanf("%d", &rangeValue) != 1) 
     return 1; 
    // iterate for all numbers upto rangeValue 
    for (int n = 1; n <= rangeValue; n++) { 
     printf("%d", n); 
     for (long long x = n; x != 1;) { 
      if ((x % 2) == 0) { 
       x = x/2; 
      } else { 
       x = (3 * x) + 1; 
      } 
      printf(",%lld", x); 
     } 
     printf("\n"); 
    } 
    return 0; 
}