蓝桥杯2023年第十四届省赛真题-幸运数字

文章介绍了如何通过编程实现找出一个整数在二进制、八进制、十进制和十六进制下均为哈沙德数的情况,从而定义为幸运数字。作者提供了一个Java程序,利用计数器遍历整数,当满足条件时计数并最终输出第2023个幸运数字——215040。
摘要由CSDN通过智能技术生成

一、题目 

幸运数字:

哈沙德数是指在某个固定的进位制当中,可以被各位数字之和整除的正整数。例如 126 是十进制下的一个哈沙德数,因为 (126) 10 mod (1+2+6) = 0 ;126 也是八进制下的哈沙德数,因为 (126) 10 = (176) 8 , (126) 10 mod (1 + 7 + 6) = 0 ; 同时 126 也是 16 进制下的哈沙德数,因为 (126) 10 = (7 e ) 16 , (126) 10 mod (7 + e ) = 0 。小蓝认为,如果一个整数在二进制、八进制、十进制、十六进制下均为哈沙德数,那么这个数字就是幸运数字,第 1 至第 10 个幸运数字的十进制表示 为:1 , 2 , 4 , 6 , 8 , 40 , 48 , 72 , 120 , 126 . . . 。现在他想知道第 2023 个幸运数 字是多少?你只需要告诉小蓝这个整数的十进制表示即可。

二、分析


        我们可以定一个计数器,当满足哈沙德数时计数器加一,当计数到2023输出这个哈沙德数。我们一直遍历整数,先把它转化成二进制、八进制、十六进制,看能否被自己的各位数字之和整除。


代码:

package lan2023;

public class B幸运数字 {

	public static void main(String[] args) {
		int count = 0;
		int i = 1;
		while(true) {
				if(i % change(i,2) == 0 && i % change(i,8) == 0 && i % change(i, 16)==0 && i % change(i, 10)==0)
					count++;
				if(count == 2023) break;
				i++;
		}
		System.out.println(i);
	}
	public static int change(int i, int n) {
		//把i转化成n进制的时候,得到每一位的和
		int sum = 0;
		while(i>0) {
			sum += i % n;
			i = i / n;
		}
		return sum;
	}
	
}

答案: 

215040

注意:

一直遍历整数可以设置一个无限的循环,当计数器达到2023时结束循环,

我们可以写一个函数来计算出 各进制下的数字之和,然后只需要判断  当前数  能否被  各进制下的数字之和 整除即可,能被整除,计数器加1

  • 15
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值