百度松果菁英班作业整理(第一期)

news2025/1/9 2:09:17

本期的题目比较简单,最后两题稍微复杂,但是主题思路也不难,大家可以一起练习。

孪生质数

在质数中,若两个质数之差为2,我们称之为孪生质数,例如(3、5)
(5、7),输入2个正整数,判断他是不是孪生质数,输出YES或者NO。

import java.util.Scanner;
import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int b = sc.nextInt();
        if (prime_judge(a) && prime_judge(b) && Math.abs((a-b))==2 ) {
            System.out.printf("YES");
        }
        else {
            System.out.printf("NO");
        }
    }
    public static boolean prime_judge(int m){
        if(m < 2){
            return false;
        }
        for (int i = 2; i <= Math.sqrt(m); i++) {
            if (m % i == 0) {
                return false;
            }
        }
        return true;
    }
}

这里可以稍微复习一下质数判断的算法,其他的没有什么好讲的,简单的条件判断。

自守数1

输入正整数N(N10),判断该数是否为自守数输出YES或者N0。当且仅当一个数的平方以与该数相同的数字结尾时,该数称为自守数。

import java.util.Scanner;
import java.util.*;

class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        if(judge_conservative_num(a)){
            System.out.printf("YES");
        }
        else System.out.printf("NO");
    }

    public static boolean judge_conservative_num(int m){
        boolean res = true;
        if ((m*m) % 10 == m && m<10) {
            res = true;
        }
        else res = false;
        return res;
    }
}

卡罗尔数

卡罗尔数是其值满足4n-2(n+1)-1的整数(n为正整数)。输入正整数N判断它是不是卡罗尔数,输出YES或者NO。

import java.util.Scanner;
import java.util.*;

class Main {

   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        sc.close();
        boolean isCarolNumber = false;

        for (int n = 1; ; n++) {
            int carolNumber = 4 * n - 2 * (n + 1) - 1;
            if (carolNumber == a) {
                isCarolNumber = true;
                break;
            }
            if (carolNumber > a) {
                break;
            }
        }

        if (isCarolNumber) {
            System.out.println("YES");
        } else {
            System.out.println("NO");
        }
    }
}

这是最基础的算法,但是我觉得应该还是有更优化的算法的,毕竟一个一个遍历确实太慢了。

输入正整数N,请在1!,2!,3!. N!中查找尾数为零的数,统计这样的数字的个数并输出。
1722497658749.png

尾数为0

import java.util.Scanner;
import java.util.*;

class Main {

   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        int count = 0;
        for (int i = 1; i <= a; i++) {
            if(fac(i)%10 == 0) count++;
        }
        System.out.println(count);
    }

    public static int fac(int m){
        int res = 0;
        if (m==0 || m==1) res=1;
        else if (m >= 2) res = m * fac(m-1);
        return res;
    }

}

数组最大公约数

给定一个由N个正整数组成的数组,求所有数组元素的最大公约数。

import java.util.Scanner;
import java.util.*;

class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int []arr = new int[N];
        for (int i = 0; i <N ; i++) {
            arr[i] = sc.nextInt();
        }
        sc.close();
        int res = 0;
        res = Greatest_common_divisor(arr);
        System.out.println(res);
    }
    public static int Greatest_common_divisor(int a,int b){
        if (b == 0) {
            return a;
        }
        return Greatest_common_divisor(b, a % b);
    }
    public static int Greatest_common_divisor(int []numbers){
        int result = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            result = Greatest_common_divisor(result, numbers[i]);
            // 如果在此过程中发现最大公约数为1,可以直接返回1
            if (result == 1) {
                return 1;
            }
        }
        return result;
    }
}

这里复习一下辗转相除法求两个数的最大公约数,也是用一个递归的思想完成:不断将较小的数和两数相除的余数作为新的参数传递,直到余数为0,此时返回的数即为最大公约数。
然后就是用了一个方法的重载,实现一组数求最大公约数。

指定集合

某数组含有N个元素,输出那些数字来自集合{4,5,6}的元素,按原序。没有就输出-1。

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        List<Integer> result = new ArrayList<>();

        int N = scanner.nextInt();
        int[] array = new int[N];
        for (int i = 0; i < N; i++) {
            array[i] = scanner.nextInt();
        }

        // 遍历数组,检查每个元素是否属于集合 {4, 5, 6}
        for (int num : array) {
            if (num == 4 || num == 5 || num == 6) {
                result.add(num);
            }
        }

        // 如果没有符合条件的元素,输出 -1
        if (result.isEmpty()) {
            System.out.println(-1);
        } else {
            // 按原序输出符合条件的元素
            for (int num : result) {
                System.out.print(num + " ");
            }
        }

        scanner.close();
    }
}

这里用到了一个动态列表的创建,可以参考一下我之前的这篇文章——简易测井资料处理分析系统,里面有类似的讲解,我们暂时不展开讲,后面也会有单独的文章发出来。

阶乘数

输入正整数N,找出它是否是一个等于其他数的阶乘值的数,输出YES或者NO。

import java.util.Scanner;
import java.util.*;

class Main {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int N = sc.nextInt();
        int count = 0;
        for (int i = 0; i <= N; i++) {
            if (N == fac(i)){
                count++;
                break;
            }
        }
        if(count!=0) System.out.println("YES");
        else System.out.println("NO");
    }
    public static int fac(int m){
        int res = 0;
        if (m==0 || m==1) res=1;
        else if (m >= 2) res = m * fac(m-1);
        return res;
    }
}

自守数2

输入正整数N,检查该数是否为自守数输出YES或者N0。当且仅当一个数的平方以与该数相同的数字结尾时,该数称为自守数。

import java.util.Scanner;
import java.util.*;

class Main {

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        String n = Integer.toString(a);
        int digits = n.length();
        if(jcn(a,digits)){
            System.out.printf("YES");
        }
        else System.out.printf("NO");
    }

    public static boolean jcn(int m,int digits){
        boolean res = true;
        if ((m*m) % (Math.pow(10,digits)) == m ) {
            res = true;
        }
        else res = false;
        return res;
    }
}

这里注意反复读题,不要有思维惯性,认真弄懂题目要求之后再开始写代码。

N的零

输入正整数N,将N的所有零转换为5。没有就原样输出。不考虑不合理的输入等特殊情况。

import java.util.Scanner;
import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int a = sc.nextInt();
        sc.close();

        String n = Integer.toString(a);
        StringBuilder result = new StringBuilder();

        for (int i = 0; i < n.length(); i++) {
            char digit = n.charAt(i);
            if (digit == '0') {
                result.append('5');
            } else {
                result.append(digit);
            }
        }

        int modifiedNumber = Integer.parseInt(result.toString());
        System.out.println(modifiedNumber);
    }
}

这里也是提供一种思路嗷,刚开始我一直拿模运算和除运算想判断0和5,发现有点复杂,后来干脆偷了个懒直接用字符判断了,确实也简单许多。
这里我们先将读取的正整数用Integer.toString()转换成字符型,然后我们对StringBuilder这个类进行实例化:
StringBuilder result = new StringBuilder();
这是 Java 中的一个类,表示一个可变的字符序列。与 String 类不同,String 类是不可变的(即一旦创建,其值不能被改变),**而 StringBuilder 允许你在创建后通过追加、插入或删除字符和子字符串来修改其内容。我们后续也是这么做的。
然后我们进行了一个遍历+索引,其中
charAt()**是 String 类的一个方法,用于返回字符串中指定位置的字符。如果是0就用.append加一个字符5到result这个可变字符序列后面,如果不是0就把这个字符放到result这个可变字符序列后面。
最后我们用int modifiedNumber = Integer.parseInt(result.toString());
将字符转换成整型。

最大非递减数字

输入正整数N,找到小于或等于它的最大数字,并且其数字从高位到低位是非递减的顺序。

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int N = scanner.nextInt();
        scanner.close();

        int result = findLargestNumber(N);
        System.out.println(result);
    }

    public static int findLargestNumber(int N) {
        char[] digits = Integer.toString(N).toCharArray();

        int i = 0;
        // 找到第一个不满足非递减顺序的位置
        while (i < digits.length - 1 && digits[i] <= digits[i + 1]) {
            i++;
        }

        // 如果找到了这样的位置
        if (i < digits.length - 1) {
            // 将该位置的数字减1
            digits[i]--;
            // 将该位置之后的所有数字设置为9
            for (int j = i + 1; j < digits.length; j++) {
                digits[j] = '9';
            }
        }

        // 将字符数组转换回整数
        return Integer.parseInt(new String(digits));
    }
}

1722497589102.png
这个题还是稍微有点意思的,要弄清楚——从高位到低位是非递减的顺序是什么意思。比如299、399甚至999都满足,还有157、137、138、135、188、177等等等等,但是要满足最大的,那就要往“9”这个数字上靠啦。
我们得到一个数,然后用 char[] digits = Integer.toString(N).toCharArray();这个跟上一题的很像,但是多了一个’.toCharArray()'。toCharArray()是 String 类的一个方法,用于将字符串转换为字符数组。例如,如果字符串是 “1234”,那么 toCharArray() 将返回字符数组 {‘1’, ‘2’, ‘3’, ‘4’}。
那么我们得到类似的效果后接下来就是重点了:

while (i < digits.length - 1 && digits[i] <= digits[i + 1]) {
            i++;
        }

怎么理解呢?比如我们输入513,很明显他是不满足非递减顺序数字的,我们就要找到它是在哪个位置上不满足,i=0时他就会判断5是>1的,所以结束循环,然后此时i仍然是0,不执行i++。

if (i < digits.length - 1) {
            // 将该位置的数字减1
            digits[i]--;
            // 将该位置之后的所有数字设置为9
            for (int j = i + 1; j < digits.length; j++) {
                digits[j] = '9';
            }
        }

那么我们就将digits的0位置数字-1,就变成4,其他位置都变成9,也就是499,就找到最大的非递减顺序数字了!

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

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

相关文章

大数据技术原理-MapReduce的应用

摘要 本实验报告详细阐述了在“大数据技术原理”课程中进行的MapReduce编程实验。实验环境基于Hadoop平台和Ubuntu操作系统。实验的核心内容包括使用MapReduce编程模型实现文件的合并去重、排序以及对给定表格信息的挖掘。实验过程中&#xff0c;我们首先在Hadoop分布式文件系…

基于统计检验与随机森林分析不同天气类型的影响因素

1.项目背景 本项目使用了一个人工合成的天气数据集&#xff0c;模拟了雨天、晴天、多云和雪天四种类型&#xff0c;在分析过程中&#xff0c;对数据进行了异常值处理&#xff0c;并通过描述性统计对数据进行了初步探索&#xff0c;接着&#xff0c;使用Kruskal-Wallis检验、Du…

Flutter连接iPad报错Developer Mode

Flutter连接iPad报错Developer Mode To use 黑色iPad for development, enable Developer Mode in Settings → Privacy & Security.根据错误提示&#xff0c;在ipad中的“安全性”中没有“开发者模型”选项。 打开安全模式步骤: 需要打开Xcode,连接iPad, 在iPad中点击“…

app逆向抓包技巧:ROOT检测绕过

本篇博客旨在记录学习过程&#xff0c;不可用于商用等其它途径 场景 某监管app查壳发现使用了 《梆梆企业版》 加固&#xff0c;想尝试使用frida-dexdump脱壳&#xff0c;打开app发现提示下图样式&#xff0c;由于进不去界面&#xff0c;我们直接脱壳无法保证能获取到完整的 …

虚拟机windows server创建域

目录 准备工作 一、新建域控制器 二、提升为域控制器添加新林 三、新建组织单位&#xff08;OU&#xff09;&#xff0c;用户 四、将计算机加域 五、在域控中管理计算机 六、在域控中配置组策略 七、域内计算机验证组策略配置 准备工作 安装域前&#xff0c;如果有DNS…

Golang | Leetcode Golang题解之第310题最小高度树

题目&#xff1a; 题解&#xff1a; func findMinHeightTrees(n int, edges [][]int) []int {if n 1 {return []int{0}}g : make([][]int, n)deg : make([]int, n)for _, e : range edges {x, y : e[0], e[1]g[x] append(g[x], y)g[y] append(g[y], x)deg[x]deg[y]}q : []i…

二百五十二、OceanBase——Linux上安装OceanBase数据库(二)

一、目的 在OBD页面上部署OceanBase数据库时发现&#xff0c;需要把新用户也要配置ssh免密登录 二、前提 root用户已经设置免密登录 三、配置步骤 1 切换到新用户obadmin [roothurys23 ~]# su obadmin 2 执行命令生成秘钥文件 [obadminhurys23 oceanbase]$ ssh-keygen …

限免下载:715页 | 2024民营企业数字化转型典型案例集

一、前言 数字化转型不仅仅是技术的更新换代&#xff0c;它涉及到企业运营模式、组织架构、企业文化等多个层面的深刻变革。通过数字化&#xff0c;企业能够更好地理解市场动态&#xff0c;提升决策效率&#xff0c;优化客户体验&#xff0c;并最终实现业务增长和价值创造。 …

不可错过的2024翻译工具合集,提升沟通效率必备

如果你想要提升外文阅读能力&#xff0c;但是有没什么外语基础怎么办。现在有不少翻译工具可以实现整份文件进行翻译&#xff0c;让这些工具在日常生活和学习中发挥作用。 1.福昕在线翻译 链接直达&#xff1a;https://fanyi.pdf365.cn/doc 这个工具有齐全的翻译功能。可以…

利用SSE打造极简web聊天室

在B/S场景中&#xff0c;通常我们前端主动访问后端可以使用axios&#xff0c;效果很理想&#xff0c;而后端要访问前端则不能这样操作了&#xff0c;可以考虑SSE、websocket和gRPC等方式&#xff0c;实时和性能均有保障。 下面给出一个简单的例子&#xff0c;后端是nodeexpress…

体验教程:通义灵码陪你备战求职季

本场景将带大家体验在技术面试准备场景下&#xff0c;如何通过使用阿里云通义灵码实现高效的编程算法题练习 、代码优化、技术知识查询等工作&#xff0c;帮助开发者提升实战能力&#xff0c;更加从容地应对面试挑战。主要包括&#xff1a; 1、模拟题练习&#xff1a;精心挑选…

Python基础教程(二)字符串和函数

6.字符串 6.1 字符串的表示方式 6.1.1 普通字符串 普通字符串指用单引号()或双引号(”")括起来的字符串。例如:Hello或"Hello" >>> Hello Hello >>> "Hello" Hello >>> s\u0048\u0065\u006c\u006c\u006f >>> …

Oracle19c数据库system密码锁定

一、在oracle 19c数据库中&#xff0c;cdb中system用户被锁定&#xff0c;locked 二、所在的pdb中的system用户状态是正常的&#xff0c;但不可用&#xff0c;连接的时候提示账号已锁定 三、解决 在cdb中将system用户解锁。 alter user system account unlock;

LeetCode面试150——45跳跃游戏II

题目难度&#xff1a;中等 默认优化目标&#xff1a;最小化平均时间复杂度。 Python默认为Python3。 目录 1 题目描述 2 题目解析 3 算法原理及代码实现 3.1 反向查找 3.2 正向查找 参考文献 1 题目描述 给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]…

使用 Java 8 的 BiPredicate 和 Stream API 进行数据过滤和分组

在本文中&#xff0c;我们将学习如何使用 Java 8 的 BiPredicate 和 Stream API 来进行数据过滤和分组。我们将通过一个具体的例子来演示这一过程&#xff0c;例子中包含学生成绩的筛选和基于考试时间段的分组。 案例介绍 我们有两个实体类&#xff1a;StudentScore 和 ExamT…

满客宝智慧食堂系统 selectUserByOrgId 未授权访问漏洞复现

0x01 产品简介 满客宝智慧食堂系统由正奇晟业&#xff08;北京&#xff09;科技有限公司开发&#xff0c;旨在通过科技手段提升食堂的服务水平和就餐体验。该系统支持多种食堂就餐形式&#xff0c;如自选餐、自助餐、档口就餐、预订取餐等&#xff0c;满足不同场景下的餐饮需求…

从理论到实践网络编程模型:(BIO、NIO、AIO)同步与异步模型的原理与应用 (四)

我是写Java的就用Java及所需要的基础来写的本篇文章&#xff0c;其他语言的讲解和应用暂时也不会&#xff0c;欢迎大佬在评论区指导&#xff0c;给出其他语言的讲解分析与应用 Java数据传输字符流和字节流 java.io 是 Java 编程语言中的一个包&#xff0c;主要用于输入和输出&…

Linux 和 Unix 的关系

Linux 和 Unix 的关系 2.2.1unix 是怎么来的 2.2.2Linux 是怎么来的 GNU计划的另一个目的是构建自由的软件文化&#xff0c;以支持以无条件自由软件和开放源码程序这种文化理念为核心的一整套系统&#xff0c;来推动软件在世界范围内的普及及发展。其中包括支持点&#xff08;推…

java开发环境搭建基础之2----开发工具eclipse在windows的安装

一.背景 公司安排了带徒弟任务&#xff0c;写点基础的环境搭建这些吧。搭建基础开发环境&#xff0c;主要是jdk、eclipse、git、maven、mysql。后续再考虑编写jenkins、nexus、docker、1panel等CI/CD环境搭建。本次主要内容是eclipse的下载安装及运行。我的开发环境&#xff0c…