好数(蓝桥杯)

您所在的位置:网站首页 3d杀百位十位个位最新算法 好数(蓝桥杯)

好数(蓝桥杯)

2024-06-24 03:13| 来源: 网络整理| 查看: 265

文章目录 好数题目描述暴力方法一暴力方法二(超时)

好数 题目描述

【问题描述】 一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位 · · · )上的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数,我们就称之为“好数”。

给定一个正整数 N,请计算从 1 到 N 一共有多少个好数。 【输入格式】 一个整数 N。 【输出格式】 一个整数代表答案。 【样例输入 1】

24

【样例输出 1】

7

【样例输入 2】

2024

【样例输出 2】

150

【样例说明】 对于第一个样例,24 以内的好数有 1、3、5、7、9、21、23,一共 7 个。

【评测用例规模与约定】 对于 10% 的评测用例,1 ≤ N ≤ 100。 对于 100% 的评测用例,1 ≤ N ≤ 107。

暴力方法一

从题目中可以得出结论:奇数位(个位、百位、万位 · · · )上的数字是奇数,偶数位(十位、千位、十万位 · · · )上的数字是偶数

那么就可以定义一个k代表数字n的当前位数,从1开始计数,即个位是1,十位是2,百位是3……

然后就可以从个位开始取数,判断该数是否为好数,每取走一位,k加上1,进入下一位

// 包含C++程序中常用的库,是C++标准库的一个集合,包括了I/O、字符串和容器等 #include // 使用std命名空间中的名字,避免每次调用标准库中的东西都要加上std::前缀 using namespace std; // 定义一个函数check,用于检查某个整数n是否是“好数” bool check(int n) { int k=1; // 代表数字n的当前位数,从1开始计数,即个位是1,十位是2,百位是3,以此类推 // 循环检查整数n的每一位 while(n) { int t=n%10; // t为n的当前最低位的数字,%运算符取余数 // 检查当前位数k是否与对应的数字t符合好数的定义 if(k%2==1 && t%2==0) // 如果位数k是奇数但数字t是偶数,则不满足好数的定义 return false; // 返回false,表示n不是好数 if(k%2==0 && t%2==1) // 如果位数k是偶数但数字t是奇数,则不满足好数的定义 return false; // 返回false,表示n不是好数 n /= 10; // n去掉最低位的数字,/=运算符用来对n除以10并将结果赋值给n k++; // 增加位数计数器,因为已经检查了一位 } // 如果所有位的检查都通过,则n是好数 return true; // 返回true,表示n是好数 } // 程序的主函数 int main() { int n; // 定义一个整型变量n用来存放输入的数字 cin >> n; // 从标准输入流中读取一个整数到变量n int ans = 0; // 初始化答案变量ans,用于计数有多少个好数 // 循环,从1开始到n结束 for(int i=1; i


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3