题目链接

卡拉兹函数

题目描述

卡拉兹函数(Collatz function)的定义如下: 给定一个正整数 n

  • n 为偶数,则 f(n) = n / 2
  • n 为奇数,则 f(n) = 3n + 1

请计算并输出 f(n) 的值。

输入描述: 在一行中输入一个正整数 n

输出描述: 输出一个正整数,表示 f(n) 的结果。

解题思路

本题的核心是根据输入整数 n 的奇偶性,选择不同的计算公式。这是一个典型的条件分支问题。

  1. 读取输入:从标准输入读取一个整数 n
  2. 判断奇偶性:使用模运算(取余)% 来判断 n 是奇数还是偶数。
    • 如果 n % 2 == 0,则 n 是偶数。
    • 否则,n 是奇数。
  3. 应用相应公式
    • 如果 n 是偶数,则计算 n / 2
    • 如果 n 是奇数,则计算 3 * n + 1
  4. 输出结果:将计算出的结果输出。

代码

#include <iostream>

using namespace std;

int main() {
    int n;
    cin >> n;
    
    // 判断 n 的奇偶性
    if (n % 2 == 0) {
        // 偶数情况
        cout << n / 2 << endl;
    } else {
        // 奇数情况
        cout << 3 * n + 1 << endl;
    }
    
    return 0;
}
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        
        // 判断 n 的奇偶性
        if (n % 2 == 0) {
            // 偶数情况
            System.out.println(n / 2);
        } else {
            // 奇数情况
            System.out.println(3 * n + 1);
        }
    }
}
n = int(input())

# 判断 n 的奇偶性
if n % 2 == 0:
    # 偶数情况
    # 使用 // 进行整数除法
    print(n // 2)
else:
    # 奇数情况
    print(3 * n + 1)

算法及复杂度

  • 算法:条件判断与算术运算。
  • 时间复杂度: - 这是一个固定的计算和判断流程。
  • 空间复杂度: - 仅需常数空间存储变量。