当前位置: 代码迷 >> 综合 >> 用 Haskell 求解 ACM 竞赛题(6):3n + 1 问题
  详细解决方案

用 Haskell 求解 ACM 竞赛题(6):3n + 1 问题

热度:63   发布时间:2023-12-12 16:23:09.0

3n + 1 问题
猜想: 对于任意大于 1 的自然数 n, 若 n 为奇数, 则将 n 变为 3n + 1, 否则变为 n 的一半。 经过若干次这样的变换, 一定会使 n 变为 1。 例如, 3 → 10 → 5 → 16 → 8 → 4 → 2 → 1。 输入 n, 输出变换的次数。 n ≤ 1 0 9 n ≤ 10^9 n109

样例输入: 3
样例输出: 7

C语言代码:

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

Haskell 语言代码:

jiaogu 1 = 0
jiaogu n | mod n 2 == 0  = 1 + jiaogu (div n 2)| otherwise     = 1 + jiaogu (n*3 + 1)main = dos <- getLinereturn (jiaogu (read s))
  相关解决方案