问题描述
- 哎,我也就郁闷了,怎么简单的题自己竟然找不见错误。
-
问题描述:
对于每一个大于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("%dn",a); } if( a%2 != 0 ) { a = a * 3 + 1; printf("%dn",a); } if( a == 1 ) break; } return 0; }
解决方案
// 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("%dn", a);
continue;
}
if (a % 2 != 0)
{
a = a * 3 + 1;
printf("%dn", a);
continue;
}
}
return 0;
}
解决方案二:
a == 1这个要写在前面,否则当a = 2被除以2得到a =1的时候,它又被*3+1了。
解决方案三:
也可以把判断写在前面
while (a !=1)
时间: 2024-12-09 16:53:26