{"title":"# 挑战题:角谷猜想\n\n## 题目描述\n\n数学界著名的角谷猜想是指,对于任何一个正整数 $n$,都能通过有限次变换,使之最后变成 $1$。其中,该变换是指:\n- 如果 $n$ 是奇数,将 $n$ 变成 $3n+1$;\n- 如果 $n$ 是偶数,将 $n$ 变成 $\frac n2$。\n从 $n$ 变到 $1$ 的过程中出现过的每个数字按顺序构成数 $n$ 的角谷变换序列。\n现在给出 $m$ 个正整数,要求输出每个数的角谷变换序列,最后输出角谷变换序列最长的一个数和它对应的序列长度(如果有多个数的序列长度相同,输出最早读入的那个数)。\n\n## 输入格式\n\n第一行输入一个正整数 $m$($1\le m\le 1000$)。\n第二行输入 $m$ 个正整数 $n_i$($1\le n_i\le 1000$)。\n从标准输入读入数据。\n\n## 输出格式\n\n共输出 $m+1$ 行。\n对于前 $m$ 行,第 $i$ 行输出 $n_i$ 的角谷变换序列。\n第 $m+1$ 行输出两个正整数,表示序列最长的那个数和它对应的序列长度(如果有多个数的序列长度相同,输出最早读入的那个数)。\n输出到标准输出。\n\n## 样例 #1\n\n### 样例输入 #1\n\n\n3\n1 3 20\n\n\n### 样例输出 #1\n\n\n1\n3 10 5 16 8 4 2 1\n20 10 5 16 8 4 2 1\n3 7\n\n写出一个正确的C++代码内容:cpp\n#include <iostream>\n#include <vector>\n#include <unordered_map>\nusing namespace std;\\nint main() {\n int m; \n cin >> m; \n vector<int> nums(m);\n unordered_map<int, vector<int>> sequences; \n int maxLength = 0; \n int maxNum = 0; \n\\n for (int i = 0; i < m; i++) { \n cin >> nums[i]; \n int num = nums[i]; \n vector<int> sequence; \n sequence.push_back(num); \n\\n while (num != 1) { \n if (num % 2 == 0) { \n num = num / 2; \n } else { \n num = 3 * num + 1; \n } \n sequence.push_back(num); \n } \n\\n if (sequence.size() > maxLength) { \n maxLength = sequence.size(); \n maxNum = nums[i]; \n } \n\\n sequences[nums[i]] = sequence; \n } \n\\n for (int i = 0; i < m; i++) { \n for (int j = 0; j < sequences[nums[i]].size(); j++) { \n cout << sequences[nums[i]][j] << " "; \n } \n cout << endl; \n } \n\\n cout << maxNum << " " << maxLength << endl; \n\\n return 0; \n}\n

角谷猜想:C++代码实现和序列生成

原文地址: https://www.cveoy.top/t/topic/qvUN 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录