蓝桥杯刷题--幸运数字

幸运数字

题目:

解析:

我们由题目可以知道,某个进制的哈沙德数就是该数和各个位的和取整为0.然后一个幸运数字就是满足所有进制的哈沙德数之和.然后具体就是分为以下几个步骤

  1. 我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数

  2. 我们在main方法里面调用这个方法,来判断分别在二进制,十进制,八进制,十六进制的情况下的哈沙德数,然后我们取交集,取交集的写法我们直接可以用&&操作把上面的判断放在一个if里面进行判断.

3.我们找的是第2023个,因此我们需要在2的步骤上加上一个循环,并且进行计数,如果满足2,那么计数就进行++,我们直到要找到第2023个数位置,因此我们可以把这个作为突破口,把它当成结束循环的条件.

复制代码
package 幸运数字;
//哈沙德数就是在某个固定的进位制中,可以被各位的数字之和整除的正整数
//幸运数字就是分别满足十进制,二进制,八进制,十六进制的哈沙德数
//我们求第2023个
public class Test {
    public static void main(String[] args) {
        int count = 0;
        //TODO 2. 我们在main方法里面调用这个方法,来判断分别在二进制,十进制,八进制,十六进制的情况下的哈沙德数,然后我们取交集,取交集的写法我们直接可以用&&操作把上面的判断放在一个if里面进行判断.
        for (int i = 1; ; i++) {
            if (jud(i, 10) && jud(i, 2) && jud(i, 8)
                    && jud(i, 16)) {
                count++;
            }
            //TODO 3. 我们要找到第2023个,那么就在第2023个进行输出并结束循环即可
            if (count == 2023) {
                System.out.print(i);
                break;
            }
        }
    }
    //TODO 1.我们先写一个方法,里面主要是用来判断,这个数在该进制下是否是哈沙德数
    static boolean jud(int num, int base) {
        int initial = num;
        int sum = 0;
        while (num > 0) {
//            while (num/base != 0)

            sum = sum + num % base;
            num = num / base;

        }
        return initial % sum == 0;
    }
}

重点:

学会实现不同进制的哈沙德数的判断,里面就有取出各个位的操作

我们举个例子:如果是123,我们以十进制为例子,我们先取余得到第一位,123%10 = 3,然后我们要取出第二位的话要先通过取整操作,123/10=12,然后我们再对12进行取余操作,12%10=2,依次取出每一位,然后把每一位相加,判断条件,我测试了一下,一开始我写的是num/10!=0,如果我们num一开始就是1的话,我们根本就进不去这个循环,并且后续会出现算数异常,我们以num>0作为条件的依据,我认为,num再怎么取整也不可能位负数,然后为什么不能等于0呢?如果为0的话,那么就会陷入死循环了,num/10==0,这个会导致死循环,

在这个代码里面,我们值得学习的是它这个循环的终止条件

我们不知道到底什么时候是2023个满足上述所有条件的数字,因此我们的for循环里面的i的判断条件不能确定到第多少个,因此我们可以先省略,然后设置个计数器count,每当我们if判断条件满足的时候,我们就让count++,直到count等于2023为止,说明我们找到了第2023个幸运数字,然后我们打印它再进行break进行破除即可.

相关推荐
_Evan_Yao3 小时前
技术成长周记06|面试中看清差距,新项目点燃热情
面试·职场和发展
haina20197 小时前
《品牌观察》专访海纳AI:引领AI面试测评新时代
人工智能·面试·职场和发展
Raink老师8 小时前
【AI面试临阵磨枪】什么是 MCP(Model Control Protocol)、A2A(Agent-to-Agent)协议?
人工智能·面试·职场和发展·ai 面试
久菜盒子工作室9 小时前
面试|产品经理|为什么从 xxx(主要是实习 、工作)离职?
面试·职场和发展·产品经理
千寻girling11 小时前
被内推的面试 , 第一次
java·前端·python·面试·职场和发展·typescript·node.js
Java后端的Ai之路11 小时前
LangChain 面试问答指南2
面试·职场和发展·langchain
CeshirenTester11 小时前
面试紧张卡壳?别练背稿了,练“在压力下聊天”才是正解
面试·职场和发展
AC赳赳老秦11 小时前
程序员面试:OpenClaw生成面试题、模拟面试,高效备战面试
人工智能·python·机器学习·面试·职场和发展·deepseek·openclaw
我命由我1234511 小时前
程序员的心理学学习笔记 - 反刍思维
经验分享·笔记·学习·职场和发展·求职招聘·职场发展·学习方法
knight_9___12 小时前
Agent开放开发面试圣经7
面试·职场和发展