幸运数字(蓝桥杯23省赛)

幸运数字(蓝桥杯23省赛)

题目分析

暴力判断的思路就不讲了,这道题主要想将一个思想,对于这种数字类的题目,对半枚举的思路。

100000000是不符合要求的,所以最多遍历到99999999。这个思路是我一半一半的凑,把9999999分成两半,每一半的位数最多是9999。这里的i遍历的就是左半边的位数,所以是小于等于4的。

 for (int i = 1; i <= 4; i++) {}

第二层for循环遍历的是左半边各位数字之和,最大就是这i位都为9,那么值就是i*9

 for (int j = 1; j <= i * 9; j++) {

现在我要找右边那一半是多少,按理说左边位数确定了,右边和他一样就行了,不用遍历,但是这样做的话我就找不到类似1001这样的数字了,因为这个数字左半边值是10,右半边值是1,也就是说满足题意的数字,并不要求左右半边相等,不相等,也就是右边比左边位数少的时候,我补0就可以了。1001就是右半边的1补了0。

for (int k = 1; k <= i; k++)

然后我只需要这点位数为i和为j和位数为k和为j的数字的个数,然后让它们相乘即可。

 count += a[i][j] * a[k][j];

提问:但是怎么这个0才会出现呢,就是怎么才能补上?

如果我没有第三层遍历,我只找了和左边位数一样的右边就是没有补0,如果我有第三层遍历,我允许右边位数比左边位数小的情况存在,就是补了。它不是显式的有一个操作我把1的左边加个0,而是我认为10和1能够凑成一个合法数字,说明我把10和1凑一起的时候是1001这样凑的而不是101这样凑。

提问: a [ i ] [ j ] ∗ a [ k ] [ j ] a[i][j]*a[k][j] a[i][j]a[k][j]所以这个就是一个i位和为j的数和一个k位和为j的数相乘对吗?也就比如1322,就是13和22相乘吗或者是1001,是10和1相乘

不是的。举个例子。

a [ 3 ] [ 5 ] a[3][5] a[3][5]代表位数3各位数之和为5的数字个数,比如有122,221,212,203,230,302,320,140,104,410,401,500,113,131,311。所以 a [ 3 ] [ 5 ] = 15 a[3][5]=15 a[3][5]=15

a [ 2 ] [ 5 ] a[2][5] a[2][5]代表位数2各位数之和为5的数字个数,比如有23,32,50,14,41,所以 a [ 2 ] [ 5 ] = 5 a[2][5]=5 a[2][5]=5

那么 a [ 3 ] [ 5 ] ∗ a [ 2 ] [ 5 ] = 15 ∗ 5 = 75 a[3][5]*a[2][5]=15*5=75 a[3][5]a[2][5]=155=75,也就是找到了75个合法数字,他们分别是122023,122032,122050,122014,122041,221023,221032等。

根据上述例子,左半边和右半边的位数不同也没有关系,我在右半边数字的左边添0依然可以组成合法数字。

题目代码

public class Main {static int a[][] = new int[5][50]; // 定义数组a[i][j]表示i位数和为j,j最大为9*i;static int count = 0;	 static void num(int x) {int t = 0, sum = 0; // t为位数,sum为各个位上的数字之和 while (x>0) { //这个循环主要就是用来求各个位上的数字之和的 sum += x % 10; // 取x的个位数加到sum中x /= 10; // 将x除以10,相当于去掉x的个位数t++; //计数:数字的位数+1 }a[t][sum]++; //和为sum的t位数,这个数的个数+1,数组加 }public static void main(String[] args) {for (int i = 1; i <= 9999; i++) {num(i); //调num函数 }// System.out.println(a[3][5] + " " + a[2][5]);//for (int i = 1; i <= 4; i++) { // 左一半,1~4   for (int j = 1; j <= i * 9; j++) {//一半的和,最大就是这i位都为9,那么值就是i*9for (int k = 1; k <= i; k++) { // 枚举右一半的位数,可以比左半边位数小count += a[i][j] * a[k][j];  //}}}System.out.println(count);
}
}
#include <stdio.h>
int a[5][50] = {0}; // 定义数组a[i][j]表示i位数和为j,j最大为9*i;
int count = 0;void num(int x) {int t = 0, sum = 0; // t为位数,sum为各个位上的数字之和 while (x) { //这个循环主要就是用来求各个位上的数字之和的 sum += x % 10; // 取x的个位数加到sum中x /= 10; // 将x除以10,相当于去掉x的个位数t++; //计数:数字的位数+1 }a[t][sum]++; //和为sum的t位数,这个数的个数+1,数组加 
}int main() {for (int i = 1; i <= 9999; i++) {num(i); //调num函数 }//for (int i = 1; i <= 4; i++) { // 左一半,1~4 、for (int j = 1; j <= i * 9; j++) {//一半的和,最大就是这i位都为9,那么值就是i*9for (int k = 1; k <= i; k++) { // 枚举右一半的位数,可以比左半边位数小count += a[i][j] * a[k][j];  //}}}printf("%d", count);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741909.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Hibernate-Validate】常用注解

常用注解: NotNull:被注释的元素(任何元素)必须不为 nul, 集合为空也是可以的。NotEmpty:用来校验字符串、集合、map、数组不能为null或也不能为空(字符串传入空格也不可以)(集合需至少包含一个元素)NotBlank:被注释的字符串的必须非空&#xff0c;空格也不行&#xff0c;空字…

Unity3D 动态生成场景管理节点详解

前言 Unity3D 提供了丰富的功能和工具&#xff0c;可以帮助开发者快速高效地创建各种类型的游戏。在游戏开发过程中&#xff0c;有时候我们需要动态生成场景管理节点来管理游戏场景中的各种元素&#xff0c;比如角色、道具、敌人等。本文将详细介绍如何在Unity3D中动态生成场景…

来吧伙计们,让AI教我们怎么说海盗语

“如果想伺机而动&#xff0c;就是这样。”——杰克船长提到海盗&#xff0c;我们往往联想到约翰尼德普在《加勒比海盗》中饰演的杰克船长。我们有什么理由不喜欢海盗呢&#xff1f;他们航行在海上&#xff0c;寻找埋藏的宝藏&#xff0c;痛饮朗姆酒&#xff0c;用自己独特的海…

FreMIM:傅里叶变换与遮罩的图像建模在医学图像分割中的应用

代码链接&#xff1a;GitHub - Rubics-Xuan/FreMIM: This repo holds the official code for the paper "FreMIM: Fourier Transform Meets Masked Image Modeling for Medical Image Segmentation". 论文链接&#xff1a;https://arxiv.org/abs/2304.10864 收录于…

差旅补助解决方案|数字化差补赋能业务提效

长期以来&#xff0c;差旅补助一直是企业为了激励员工出差并表达对员工的关怀而采取的一种方式&#xff0c;以经济和福利支持来鼓励员工积极投入工作。然而&#xff0c;由于传统差旅补助的核算、发放和管理方式存在诸多问题&#xff0c;往往适得其反&#xff0c;无法实现企业的…

RocketMQ 面试题及答案整理,最新面试题

RocketMQ的消息存储机制是如何设计的&#xff1f; RocketMQ消息存储机制的设计原理&#xff1a; 1、CommitLog文件&#xff1a; 所有的消息都存储在一个连续的CommitLog文件中&#xff0c;保证了消息的顺序写入&#xff0c;提高写入性能。 2、消费队列&#xff1a; 为每个主…

web前端练习一

1.电子汇款单 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>电子汇款单</title> </head> <body><h2>工商银行电子汇款单</h2><table border"1px">&…

C语言自学笔记10----C语言数组

C 语言数组 数组是可以存储多个值的变量。例如&#xff0c;如果要存储100个整数&#xff0c;则可以为其创建一个数组。 示例 int data[100]; 例如&#xff0c; float mark[5]; 在这里&#xff0c;我们声明了一个浮点类型的数组mark。其大小为5。意味着&#xff0c;它可以容纳5个…

MySQL row_number()函数,rank()函数和dense_rank()函数

从MySQL8.0开始引用row_number(), rank()函数和dense_rank()函数&#xff0c;也就是常见的窗口函数&#xff0c;三个函数都是一种用于计算排名的工具&#xff0c;它们根据指定的列对结果集进行排序&#xff0c;并为每一行分配一个排名值&#xff08;1,2,3,...&#xff09;。 函…

【漏洞复现】网康科技 NS-ASG 应用安全网关 SQL注入漏洞(CVE-2024-2330)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

CoSaMP算法实现压缩感知的MATLAB实现

CoSaMP(Compressive Sampling Matching Pursuit)算法是一种基于稀疏表示的信号重构算法,它是对OMP(Orthogonal Matching Pursuit)算法的改进。CoSaMP算法在信号重构和压缩感知领域有着广泛的应用,特别是在处理稀疏信号时表现出色。 基本定义 下面是对CoSaMP算法的详细解…

(自用笔记)每天一点vue3—— echarts横坐标刻度标签显示不完全的问题

我是想做一个vue3echarts的账单数据展示项目&#xff0c;因为有vue2的基础&#xff0c;打算直接在这个项目上熟悉掌握vue3的新特性。这系列笔记就按照遇见问题解决问题的思路更新&#xff0c;不按照官方快速上手的章节&#xff0c;特此说明。 echarts 上次遗留一个横坐标刻度标…

strcat函数

函数理解记忆&#xff1a;str表示是<string.g>中的函数&#xff0c;cat表示附加。意思是将一个字符串的内容附加到另一个字符串的末尾。 注意要点&#xff1a;既然要附加&#xff0c;附加的字符串和被附加的字符串都要有\0。否则不知道附加多少&#xff0c;不知附加在哪…

Jtti:如何在CentOS中安装和配置Tomcat应用服务器

在CentOS中安装和配置Tomcat应用服务器非常简单&#xff0c;以下是一种基本的步骤&#xff1a; 步骤 1: 安装Java 首先&#xff0c;确保您的系统上已经安装了Java Development Kit (JDK)。Tomcat需要Java环境来运行。 sudo yum install java-devel 步骤 2: 下载和解压Tomcat 访…

免费视频背景素材下载

找免费视频素材、背景就上这6个网站&#xff0c;高质量&#xff0c;无版权可商用。 1、菜鸟图库 https://www.sucai999.com/video.html?vNTYwNDUx 菜鸟图库虽然是个设计素材网站&#xff0c;但除了设计类素材之外还有很多视频、音频、办公类等素材&#xff0c;视频素材就有上…

前端实现复制粘贴功能

在前端开发的世界里&#xff0c;复制粘贴功能就像是那个总是被忽视&#xff0c;却在关键时刻能救你一命的老朋友。我们习惯了用那些古老的魔法咒语&#xff08;document.execCommand(copy)&#xff09;来实现这一功能&#xff0c;但时代在进步&#xff0c;技术在更新&#xff0…

Frostmourne - Elasticsearch源日志告警配置

简介 配置Frostmourne 接入Elasticsearch源进行日志匹配告警&#xff0c;并静默规则&#xff0c;告警消息发送到企业微信&#xff0c;告警信息使用Markdown。 部署安装教程查看&#xff1a; https://songxwn.com/frostmourne_install ELK 安装教程&#xff1a;https://songx…

[C/C++] -- 双指针

1.简介 双指针技巧是一种常见的算法解题方法&#xff0c;通过使用两个指针在数据结构上同时移动&#xff0c;可以解决多种问题。这种技巧通常适用于数组、字符串和链表等数据结构&#xff0c;下面我将详细介绍双指针技巧的特点和应用场景&#xff1a; 特点&#xff1a; 快慢…

综合实验---Web环境搭建

题目&#xff1a; 服务器IP地址规划&#xff1a;client&#xff1a;12.0.0.12/24&#xff0c;网关服务器&#xff1a;ens36:12.0.0.1/24、ens33&#xff1a;192.168.10.1/24&#xff0c;Web1&#xff1a;192.168.10.10/24&#xff0c;Web2&#xff1a;192.168.10.20/24&#xf…

pcl弧度角度换算:rad2deg,deg2rad

角度弧度换算公式: 代码及结果在:cmath 中cos sin等常用函数的坑(弧度角度换算)-CSDN博客 pcl也有自带的rad2deg,deg2rad: 头文件 #include<pcl/common/angles.h> 代码如下 #include <iostream> #include<pcl/common/angles.h> int main() {vector<…