目录
C++九进制回文数
第十四届蓝桥杯青少年创意编程大赛C++选拔赛真题
一、题目要求
1、编程实现
提示信息:
- 回文数: 反向排列与原来一样的数就叫做回文数
- 例如,12321 是回文数,1231不是回文数。
- 九进制数:指逢9进位的一种进位计数制,以0、1、2、3、4、5、6、7、8共九个数码表示。例如:十进制数 9等于九进制数 10,十进制数81 等于九进制数 100,以此类推
给定两个正整数N和M(1≤N≤M≤5000),请计算出N到M之间(含N和M)总共有多少个数满足以下条件:1、转换为九进制之后为回文数
2、转换为九进制后每个数位上的数字都是奇数
例如:
当N=90,M=120。90到 120之间(含90和120) 总共有2 个数满定条件,为91 和109。91 转换为九进制为 111,是一个回文数,且每个数位上的数字都是奇数,109 转换为九进制为 131,是一个回文数,且每个数位上的数字都是奇数;故输出2。
2、输入输出
输入描述:输入两个正整数N 和 M(1<N<M<5000),两个正整数之间用一个空格隔开
输出描述:输出一个整数,表示 N到M之间(含 N和 M)总共有多少个满足条件的正整数
输入样例:
90 120
输出样例:
2
二、算法分析
- 从给定题目的初步分析可以看出,题目要求的是九进制回文数
- 所以需要将N到M中的每个数字转换为九进制
- 接着判断九进制数的每一位是否符合奇数回文数的要求
- 符合就将个数增加,最后输出符合要求的总数即可
三、程序编写
#include<iostream>
using namespace std;
int a[10];
int get_Nine(int k)
{
int l = 0,t;
while(k)
{
t = k % 9;
if(t % 2 == 0)
return 0;
a[l] = t;
k /= 9;
l++;
}
for(int i=0,j=l-1;i<j;i++,j--)
{
if(a[i] != a[j])
return 0;
}
return 1;
}
int main()
{
int n,m,res = 0;
cin >> n >> m;
for(int i=n;i<=m;i++)
res += get_Nine(i);
cout << res << endl;
return 0;
}
四、程序说明
- 首先需要导入输入输出流头文件
- 然后是引入std命名空间中的所有成员到当前的程序中,这样在当前的程序中就可以直接使用 std 命名空间中的所有成员,而不需要使用的时候在成员前面加上(std::)前缀
- 定义了一个大小为10的整型数组a,用于存储转换后的九进制数的每一位
- 定义一个get_Nine函数用于判断一个十进制数转换为九进制后是否为回文数,参数k为要判断的十进制数
- 函数内部进行以下操作: 初始化变量l为0,用于记录转换后的九进制数的位数
- 使用while循环,将十进制数k转换为九进制数,循环条件为k不为0
- 在循环内部,使用变量t保存k除以9的余数,即九进制数的当前位数
- 如果t为偶数,则返回0,表示不是回文数
- 否则,将t保存到数组a中并将l加1
- 将k除以9,更新k的值
- 使用for循环,检查数组a是否为回文数
- 循环条件为i小于j,同时i从0开始递增,j从l-1开始递减。如果a[i]和a[j]不相等,则返回0,表示不是回文数
- 如果以上所有条件都满足,则返回1,表示是回文数
- 在主函数main中,定义了变量n和m,分别表示范围的起始和结束值
- 然后使用for循环,依次遍历范围内的每个十进制数
- 对于每个十进制数,调用get_Nine函数判断是否为九进制的回文数,然后累加到变量res上
- 循环结束后,输出变量res的值,即范围内九进制回文数的个数
- 最后返回0,程序结束
本文作者:小兔子编程 作者首页:https://blog.csdn.net/frank2102
五、运行结果
90 120
2
六、考点分析
难度级别:中等,这题相对而言有一定的难度,在于九进制转换及每一位数的获取,具体主要考查如下:
- 充分掌握变量的定义和使用
- 学会输入流对象cin的使用,从键盘读入相应的数据
- 学会for循环的使用,在确定循环次数的时候推荐使用学会
- 学会while循环的使用,在不确定循环次数的时候推荐使用
- 学会if条件判断语句的使用,满足一定条件才能执行后面的语句
- 学会if...else...双分支语句的使用,条件满足执行一种处理,不满足执行另一种处理
- 掌握输出流对象cout的使用,与流插入运算符 << 结合使用将对象输出到终端显示
- 学会分析题目,算法分析,将复杂问题模块化,简单化,从中找到相应的解题思路
- 充分掌握变量定义和使用、分支语句、循环语句和简单算法知识的使用及输入输出的用法
PS:方式方法有多种,小朋友们只要能够达到题目要求即可!