1. 程式人生 > >角谷定理

角谷定理

1.題目描述

輸入一個自然數,若為偶數,則把它除以2,若為奇數,則把它乘以3加1。經過如此有限次運算後,總可以得到自然數值1。求經過多少次可得到自然數1。如:輸入22,輸出 22 11 34 17 52 26 13 40 20 10 5 16 8 4 2 1        STEP=16

2.分析

輸入一個自然數,首先判斷奇偶,然後做出題目指定的操作,直到輸入數變為1;
最後列印步數:
若為奇數:n=n*3+1
若為偶數:n=n/2

3.程式碼實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int step=1; //初始步數為1
void f(int i)
{
if (i % 2 == 0)//i為偶數時
{
i = i / 2;
printf(“i=%d”,i);
step++;//每執行一次操作步數+1
}
else//i為奇數時
{
i = i * 3 + 1;
printf(“i=%d”, i);
step++;//每執行一次操作步數+1
}
putchar(’ \n’);
if (i == 1)//直到i=1時結束操作
{
return;
}
printf("\n");
f(i);
// int step=1;
printf(“step=%d”,step); //列印步數
}
void main()
{
int i;
printf(“請輸入一個整數:\t”);
scanf("%d",&i);
getchar();
f(i);
getchar();
}