角谷猜想【CCF等级认证考试二级编程题】
【问题描述】
角谷猜想是指任何一个正整数如果是偶数则变为其一半,如果是奇数则变为其 3 倍加 1,最终都将变为 1。如果为 1,则按照规则将变为 4,4 则变为 2,2则变为 1,进入无限循环。该猜想尚未得到数学证明;本题先后输入两个正整数,输出该范围内角谷猜想变化步骤最多的数及其步骤;如果输入的第 1 个数大于第 2 个数,则交换,如 20 10,则计算出 10 到 20(含)之间变化步骤最多的数及其步骤。
【输入描述】
输入两行,第 1 行输入范围起点,回车后第 2 行输入范围的终点。
特别提示:常规程序中,输入时好习惯是有提示。考试时由于系统限定,输入时所有 input()函数不可有提示信息。
【输出描述】
输出两行,先输出变化步骤最大的数,然后输出步骤数量。步骤计算时,包含数本身,例如:10 的变化过程是 10,5,16,8,4,2,1,变化步骤数为 7。
【样例输入 1】
10
20
【样例输出 1】
18
21
【样例输入 2】
100
200
【样例输出 2】
171
125
【样例输入 3】
500
300
【样例输出 2】
327
144
【解题思路】
1. 首先需要确认,应使用 while 循环根据角谷猜想规则去计算推算次数;
2. 接下来想到可以在外部设置 for 循环,嵌套 while 循环计算两个输入数范围 内每个数字的推算次数;
3. 输入并保存两个数字a、b,同时需考虑并处理两个数字的大小关系(保证a
4. 创建变量记录最多推算次数,和最多推算次数的数字;
5. 设置循环嵌套结构,运算、处理数据,并按要求输出最终结果。
【参考程序】
#指定范围内角谷猜想最多步骤 First = int(input()) #输入两个数字 Second = int(input()) if First > Second: #比较大小,确保小的数字在前 First, Second = Second, First maxStep = 0 #记录最多推算次数 maxNum = First #记录最多推算次数的数字 for i in range(First,Second+1): #for 循环列举两数范围内的所有数字 N = i #将数字存入变量 N 并计算 N 的推算次数 stepCount = 1 #初始化数字 N 的推算次数为 1 while N != 1: #根据角谷猜想,当 N 等于 1 时停止 stepCount += 1 #将推算次数增加 1 if N % 2 == 0: #角谷猜想处理奇、偶数的规则 N = N // 2 else: N = N * 3 + 1 if stepCount > maxStep: #判断推算次数是否为最大值 maxStep = stepCount #记录最大推算次数 maxNum = i #记录最大推算次数的数字 print(maxNum) #循环结束后按要求输出结果 print(maxStep)
本站内容未经许可,禁止任何网站及个人进行转载。