如果当前数字为1,则该序列终止。如果当前数是奇数,那么乘以3加1得到下一个数。如果当前数是偶数,那么除以2得到下一个数

我的问题是输入一个数i,如果这个数除以2余数是1,那么i=i/2; 如果这个数除以2余数是0,那么i= 3i+1,一直这样循环直到i=1为止,然后把每一步都要输出

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
int i;
scanf("%d\n", &i);
printf("%d\n", i);
if (i % 2 == 0) {
i = 3 * i + 1;
printf("%d\n", i);
}
else if (i % 2 == 1) {
i = i / 2;
printf("%d\n", i);
}

printf("%d\n", i);
return 0;

}

能运行但是没有反应
题目要求如图所示:

img

谢谢!!

你的代码有3个错误:
(1)scanf("%d\n",&i)这一句,把\n删掉,改成 scanf("%d",*i); 但是,看你截图中内容,i 应该是通过命令行方式输入,而不是通过scanf
(2)代码主要部分你没有放在循环里。
(3)if 和 else if的逻辑写反了。

修改后运行结果:

img

代码修改如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
int main(int argc,char* argv[]) {
    int i;
    if (argc != 2)
    {
        printf("Usage:./collatz NUMBER\n");
        return 0;
    }
    i = atoi(argv[1]);
    printf("%d\n", i);
    while (i != 1)
    {
        if (i % 2 == 0) {
            i = i / 2;
            printf("%d\n", i);
        }
        else if (i % 2 == 1) {
            i = 3 * i + 1;
            printf("%d\n", i);
        }
    }
    //printf("%d\n", i);
    return 0;
}

你写错了吧,,,应该是如果这个数除以2余数是0,那么i=i/2; 如果这个数除以2余数是1,那么i= 3i+1

img

你题目的解答代码如下:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int i;
    scanf("%d", &i);
    printf("%d\n", i);
    while (i!=1) {
        if (i % 2 == 1)
        {
            i = 3 * i + 1;
        }
        else if (i % 2 == 0)
        {
            i = i / 2;
        }
        printf("%d\n", i);
    }
    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632