2 qawfhioq qawfhioq 于 2014.12.20 01:36 提问

哎,我也就郁闷了,怎么简单的题自己竟然找不见错误。

问题描述:
对于每一个大于1的正整数,如果它是奇数,则将其乘3加1,如果它是偶数,则将除以2,如此循环,最终将得到1。输出数据包含从这个整数到1的按照叙拉古猜想变换的序列,每行一个数字。

 #include <stdio.h>

int main()
{
    int a;
    scanf("%d",&a);
    while(1)
    {
        if( a%2 == 0 )
        {
            a = a / 2;
            printf("%d\n",a);
        }
        if( a%2 != 0 )
        {
            a = a * 3 + 1;
            printf("%d\n",a);
        }
        if( a == 1 )    break;
    }
    return 0;
}

3个回答

caozhy
caozhy   Ds   Rxr 2014.12.20 04:15
已采纳
 // ConsoleApplication1.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include "math.h"

int _tmain(int argc, _TCHAR* argv[])
{
    int a;
    scanf_s("%d", &a);
    while (1)
    {
        if (a == 1)
            break;
        if (a % 2 == 0)
        {
            a = a / 2;
            printf("%d\n", a);
            continue;
        }
        if (a % 2 != 0)
        {
            a = a * 3 + 1;
            printf("%d\n", a);
            continue;
        }
    }
    return 0;
}


qawfhioq
qawfhioq 我觉得是 if 与 else if 的用法,我没用对
大约 3 年之前 回复
caozhy
caozhy   Ds   Rxr 2014.12.20 04:17

a == 1这个要写在前面,否则当a = 2被除以2得到a =1的时候,它又被*3+1了。

caozhy
caozhy   Ds   Rxr 2014.12.20 04:17

也可以把判断写在前面
while (a !=1)

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!