首页 > 其他分享 >蓝桥杯2023年A组-试题A-幸运数

蓝桥杯2023年A组-试题A-幸运数

时间:2024-04-06 09:55:56浏览次数:22  
标签:10 include 试题 int halfDigits 蓝桥 num 2023 sumBack

0.题目

1.题解

1.1 暴力枚举

思路

这是一个填空题,所以可以直接暴力枚举
注意:
1.要是想要求位数: 使用 log10(abs(num)) + 1
2.%求余两边都必须是整数, pow(10, halfDigits);的返回值是double,这里必须转换

代码

#include <iostream>
#include <cmath>

bool isLuckyNumber(int num) {
	int digits = (int)log10(abs(num)) + 1; // 计算数位
	if (digits % 2 != 0) // 确保数位为偶数
		return false;

	int halfDigits = digits / 2;
	int front = num / pow(10, halfDigits);
	int back = num % (int)pow(10, halfDigits);

	int sumFront = 0, sumBack = 0;
	for (int i = 0; i < halfDigits; ++i) {
		sumFront += front % 10;
		sumBack += back % 10;
		front /= 10;
		back /= 10;
	}

	return sumFront == sumBack;
}

int main() {
	int luckyCount = 0;
	for (int i = 1; i <= 1e8; ++i) {
		if (isLuckyNumber(i)) {
			luckyCount++;
		}
	}
	std::cout << luckyCount << std::endl;
	return 0;
}

1.2 搜索

思路

使用DFS深度搜索,首先我们可以将该数切割成两部分,从半边位数、左半部分和,右半部分和作为三个参数,不断递归直至左半部分和右半部分都是四位
递归从0,0,0开始,嵌套循环表示0-9的数字,每次将位数加入计数,只要当 L!=0且 L==R的时候, 计数+1
注意前导0的问题,我们不允许类似025,013之类的数,所以设置'if (L == 0 && i == 0) continue;'避免前导0

代码

#include<bits/stdc++.h>
using namespace std;
int ans = 0;
void dfs(int x, int L, int R) {
	if(L != 0 && L==R)
		ans++;
	if(x == 4) return;
	for(int i = 0; i <= 9; i++){
		if (L == 0 && i == 0) continue; //避免前导0 
		for(int j = 0; j <= 9; j++)
			dfs(x+1, L+i, R+j);
	}

}

int main() {
	dfs(0,0,0);
	cout << ans << endl;
}

标签:10,include,试题,int,halfDigits,蓝桥,num,2023,sumBack
From: https://www.cnblogs.com/trmbh12/p/18117173

相关文章

  • LG_P8728 [蓝桥杯 2020 国 B] 填空问题 题解
    蓝桥杯2020国BP8728题解A题直接写Python暴力一下。Output:563故答案为\(563\)。B题直接写Python暴力一下(欸怎么又来了)。总之就是写一个DFS,枚举每一个向外走,步数\(x\)满足\(x\le2020\)的点就好啦!Output:20312088故答案为\(20312088\)。C题直......
  • 【附源码】java毕业设计试题库管理系统的设计与实现
    本系统(程序+源码)带文档lw万字以上 文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义选题背景:在教育领域,试题库管理系统扮演着至关重要的角色。随着教育体系的不断扩大和考试类型的多样化,传统的手工管理试题的方式已经无法满足高效、准确、便捷地出......
  • leetcode.面试题 02.07. 链表相交
    题目给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:思路假a在链表A上移动,b在链表B上移动,a移动完在B上开始,b移动完再A上开始。最终a移动的距离a+c+x,b移动的距......
  • 蓝桥杯:七步诗 ← bfs
    【题目来源】https://www.lanqiao.cn/problems/3447/learning/【题目描述】煮豆燃豆苴,豆在釜中泣。本是同根生,相煎何太急?---曹植所以,这道题目关乎豆子!话说赤壁之战结束后,曹操的船舰被刘备烧了,引领军队从华容道撤退,路上遇到了泥泞,道路不通畅,又刮起了大风,没办法,只好让羸弱的......
  • 蓝桥杯 试题 基础练习 Fibonacci数列
    问题描述Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1。当n比较大时,Fn也非常大,现在我们想知道,Fn除以10007的余数是多少。输入格式输入包含一个整数n。输出格式输出一行,包含一个整数,表示Fn除以10007的余数。说明:在本题中,答案是要求Fn除以10007的余数,因此我们只要......
  • 蓝桥杯备考随手记: Scanner 类中常用方法
    Scanner类是Java中用于从标准输入、文件或其他输入流中读取数据的类。它提供了一系列方法来读取不同类型的数据,例如整数、浮点数、字符串等。在Java中,Scanner类位于java.util包中,使用时需要先导入该包。使用Scanner类需要先创建一个Scanner对象,并将要读取的输入流传递给它的......
  • 蓝桥杯_省_21B_E_路径(c++)
    题目描述小蓝学习了最短路径之后特别高兴,他定义了一个特别的图,希望找到图中的最短路径。小蓝的图由2021个结点组成,依次编号1至2021。对于两个不同的结点a,b,如果a和b的差的绝对值大于21,则两个结点之间没有边相连;如果a和b的差的绝对值小于等于21,则两个点之间......
  • 全球变暖蓝桥杯2018省赛真题
    全球变暖蓝桥杯2018省赛真题DFS大法全球变暖#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongboolflag;chara[1010][1010];intcnt,n,ans=0,pre_ans=0,d[4][2]={1,0,-1,0,0,1,0,-1};voiddfs(intx,inty){if(x>=n||x<0||y>=n||y<0||a......
  • 蓝桥杯备考随手记: 常用的三种排序算法(冒泡排序、插入排序、选择排序)
    1.冒泡排序(BubbleSort)冒泡排序是一种简单直观的排序算法,在待排序序列中不断地交换相邻两个元素的位置,通过多次遍历,将最大(或最小)的元素逐渐向右(或左)移动到正确的位置,直到整个序列有序。冒泡排序的基本思想如下:从序列的第一个元素开始,比较相邻两个元素的大小。如果前一个元......
  • 第15届蓝桥STEMA测评真题剖析-2024年3月10日Scratch编程初中级组
    [导读]:超平老师的《Scratch蓝桥杯真题解析100讲》已经全部完成,后续会不定期解读蓝桥杯真题,这是Scratch蓝桥杯真题解析第180讲。第15届蓝桥第5次STEMA测评,这是2024年3月10日举办的STEMA,比赛仍然采取线上形式。这是Scratch初/中级组真题,试题包括两种题型,分别是选择题和编程创作......