首页 > 解决方案 > 为什么我的 Collat​​z 序列的 C 程序不打印最终值 (1)?

问题描述

我目前正在为 C 上的 collat​​z 序列制作一个程序,但是最后一个值 1 没有被打印出来。比如我输入8时,结果一定是8 4 2 1,但它只打印8 4 2,或者我输入5时,它只打印5 16 8 4 2。我可以在里面放什么while ( )来打印完整的回答?谢谢!!

void 
CollatzSequence(int n)
{

    int x = 1;

    do {
    x++;
        printf("%3d", n);
        if (n%2==0)
            n /= 2;
        else 
            n = 3 * n + 1;
    }
    while (  );

    printf("\n"); 
}

int 
main()
{
    int n;

    do {
        printf("Input an integer greater than 0: ");
        scanf("%d", &n);

        if (n <= 0)
            printf("Invalid input. Try again.\n");
    } while (n <= 0);

    CollatzSequence(n);

    return 0;
}

标签: c

解决方案


代码需要新的循环退出条件。

循环完成一次1打印。

下面的示例。

void CollatzSequence(int n) {
  for (;;) {
    printf("%3d", n);
    if (n == 1)
      break;
    if (n % 2 == 0)
      n /= 2;
    else
      n = 3 * n + 1;
  }
  printf("\n");
}

推荐阅读