C++不变初心数
2025年3月 C++编程等级考试二级真题解析
博主推荐
1、C++专栏
2、Python专栏
- 蓝桥杯python选拔赛真题详解
- 蓝桥杯python省赛真题详解
- 蓝桥杯python国赛真题详解
- 信息素养大赛python编程挑战赛
- python等级一级真题解析【电子学会】
- python等级二级真题解析【电子学会】
- python等级三级真题解析【电子学会】
一、题目要求
1、编程实现
不变初心数是指这样一种特别的数,它分别乘 2、3、4、5、6、7、8、9 时,所得乘积各位数之和却不变。例如 18 就是这样的数:18 的2倍是 36,3+6=9;18 的3倍是 54,5+4=9;…. 18 的9倍是162,1+6+2=9。对于 18 而言,9 就是它的初心。本题要求你判断任一个给定的数是否有不变的初心。
2、输入输出
输入描述:输入在第一行中给出一个正整数 N(≤100)。随后 N 行,每行给出一个不超过 105 的正整数。
输出描述:对每个给定的数字,如果它有不变的初心,就在一行中输出它的初心;否则输出'NO'
输入样例:
4
18
256
99792
88672
输出样例:
9
NO
36
NO
二、算法分析
- 从给定题目的初步分析可以看出,这是一个多组数据处理的案例
- 可以循环输入,输入完之后可以判断这个数分别乘以2到9的乘积得到的新的数的每位数字的和值是否是一样的,如果是这个和值就是不忘初心数,否则就输出NO
- 所以为了方便可以自定义两个函数,一个是根据输入的数求出乘以2到9的每一位数字并判断是否和值结果相等;另一个是用来计算数字上每个位置上的数之和
- 主函数只要判断调用是否相等的函数就可以
三、程序编写
#include<iostream>
using namespace std;
int sum(int n){
int s = 0;
while(n){
s += n % 10;
n /= 10;
}
return s;
}
int isOk(int k){
int s = sum(k * 2);
for(int i = 3;i < 10;i++){
if(s != sum(k * i))
return -1;
}
return s;
}
int main(){
int n;
cin >> n;
while(n){
int t,res;
cin >> t;
res = isOk(t);
if(res == -1)
cout << "NO" << endl;
else
cout << res << endl;
n--;
}
return 0;
}
本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102
四、运行结果
4
18
9
256
NO
99792
36
88672
NO
五、考点分析
难度级别:中等,这题相对而言在于数字处理,具体主要考察如下:
- 分析题目 找到解题思路
- 充分掌握自定义函数的定义和使用
- 学会输入流对象cin的使用,从键盘读入相应的数据
- 学会多组数据的输入和处理
- 学会for循环的使用,在确定循环次数的时候推荐使用
- 学会while循环的使用,在不确定循环次数的时候推荐使用
- 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
- 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
- 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握自定义函数、分支语句、循环语句和简单算法知识的使用及输入输出的用法
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!