目录
C/C++角谷猜想
2020年12月 C/C++编程等级考试一级编程题
一、题目要求
1、编程实现
所谓角谷猜想,是指对于任意一个正整数,如果是奇数,则乘3加1,如果是偶数, 则除以2,得到的结果再按照上述规则重复处理,最终总能够得到1。如,假定初始整 数为5,计算过程分别为16、8、4、2、1。
程序要求输入一个整数,将经过处理得到1的过程输出来。
2、输入输出
输入描述:一个正整数 N(N <= 2, 000, 000)
输出描述:从输入整数到1的步骤,每一步为一行,每一部中描述计算过程。最后一行输出"End”。 如果输入为1,直接输出"End”。
输入样例:
5
输出样例:
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
二、算法分析
- 从给定题目的初步分析可以看出,首先需要从键盘获取一个整数
- 可以使用int类型进行变量的声明,用来保存键盘输入的数据
- 题目要求最终得到数字1,而输入的数字不同要执行的次数也无法确定,所以推荐使用while循环,条件为数字不等于1
- 然后可以通过if...else双分支语句对输入的数字进行处理,如果是奇数则为当前数字乘以3加1,并输出对应过程;否则为当前数字除以2并输出对应过程
- 最后当得到数字1,输出End即可
三、程序编写
#include<iostream>
using namespace std;
int main()
{
int n,t;
cin>>n;
while(n!=1)
{
if(n % 2 == 1)
{
t = n * 3 + 1;
cout<<n<<"*3+1="<<t<<endl;
}
else
{
t = n / 2;
cout<<n<<"/2="<<t<<endl;
}
n = t;
}
cout<<"End"<<endl;
return 0;
}
四、程序说明
- 根据题目要求声明2个整形int变量(n是输入的数字,t是临时变量用来存放数字计算后的结果)
- 然后利用输入流对象cin,从键盘读取输入数字n的值
- 指定要当n!=1的时候就一直对n做如下处理:如果是奇数则为当前数字乘以3加1,并输出对应过程;否则为当前数字除以2并输出对应过程
- 最后得到的数字n为1,输出End结束
五、运行结果
5
5*3+1=16
16/2=8
8/2=4
4/2=2
2/2=1
End
六、考点分析
难度级别:简单,这题相对而言还是比较简单的,具体主要考查如下:
- 分析题目,找到解题思路
- 变量的声明和使用
- 输入流对象cin的使用,与流提取运算符 >>结合使用从键盘读取想要的数据
- while循环的使用,在不确定循环次数的时候推荐使用
- if...else双分支语句,条件满足执行一种处理,不满足执行另一种处理
- 输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!