• 判断质数问题以及判断日期是一年第几天问题分析


    说明:

    面试先笔试应该是目前大部分IT岗位的不可或缺的一环了,本人之前投递的简历有幸通过初筛,获得了笔试的机会,笔试分为选择题和编程题,采用双机位模式,编程题看着眼熟,可惜发挥不太好!!!下面给大家分享一下两道遇到的编程题吧!

    今天遇到机考的编程题是两道之前备考蓝桥杯遇到的类似的提问,难度和填空题类似,以下是题目思路

    题目一:

    判断是否为质数

    概念:

    一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数,也称为素数。
    规定:0和1既不是质数,也不是合数,最小的质数为2

    解题思路:

    一、

    首先,质数是一个大于1的自然数,所以如果输入的数小于等于1,直接可以判定它不是质数。

    二、

    其次,2是最小的质数,因此如果输入的数等于2,可以直接判定它是质数。

    三、

    如果输入的数是一个偶数(除2外),则可以直接判定它不是质数,因为偶数除了2之外都能被2整除。

    对于大于2的奇数,我们需要遍历从3开始到该数的平方根的所有奇数,检查是否有整数因子。如果存在整数因子,就可以判定它不是质数。如果没有找到整数因子,就可以判定它是质数。

    四、

    最后,如果上述条件都不满足,那么就可以判定输入的数是质数。

    代码上手实操

    要求:输入3,返回3是质数,方法名为Main,需要自己手写要导什么包

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. System.out.print("请输入一个自然数:");
    6. int userNumber = scanner.nextInt();
    7. scanner.close();
    8. if (isPrime(userNumber)) {
    9. System.out.println(userNumber + " 是质数");
    10. } else {
    11. System.out.println(userNumber + " 不是质数");
    12. }
    13. }
    14. public static boolean isPrime(int number) {
    15. if (number <= 1) {
    16. return false;
    17. } else if (number == 2) {
    18. return true;
    19. } else if (number % 2 == 0) {
    20. return false;
    21. } else {
    22. for (int i = 3; i <= Math.sqrt(number); i += 2) {
    23. if (number % i == 0) {
    24. return false;
    25. }
    26. }
    27. return true;
    28. }
    29. }
    30. }
    后来写的:
    代码一:
    1. public class PrimeNumberChecker {
    2. public static boolean isPrime(int number) {
    3. // 负数和0、1都不是质数
    4. if (number <= 1) {
    5. return false;
    6. }
    7. // 循环检查可能的因子,从2到待判断数的平方根
    8. for (int i = 2; i <= Math.sqrt(number); i++) {
    9. if (number % i == 0) {
    10. // 找到能整除的因子,不是质数
    11. return false;
    12. }
    13. }
    14. // 如果没有找到能整除的因子,是质数
    15. return true;
    16. }
    17. public static void main(String[] args) {
    18. int number = 17; // 要判断的数字
    19. if (isPrime(number)) {
    20. System.out.println(number + " 是质数");
    21. } else {
    22. System.out.println(number + " 不是质数");
    23. }
    24. }
    25. }
    代码二:
    1. public class PrimeNumberChecker {
    2. public static boolean isPrime(int number) {
    3. // 负数和0、1都不是质数
    4. if (number <= 1) {
    5. return false;
    6. }
    7. // 2是唯一的偶数质数
    8. if (number == 2) {
    9. return true;
    10. }
    11. // 如果待判断的数为偶数,那么不是质数
    12. if (number % 2 == 0) {
    13. return false;
    14. }
    15. // 从3开始,逐个检查可能的因子,只检查奇数因子
    16. for (int i = 3; i <= Math.sqrt(number); i += 2) {
    17. if (number % i == 0) {
    18. // 找到能整除的因子,不是质数
    19. return false;
    20. }
    21. }
    22. // 如果没有找到能整除的因子,是质数
    23. return true;
    24. }
    25. public static void main(String[] args) {
    26. int number = 17; // 要判断的数字
    27. if (isPrime(number)) {
    28. System.out.println(number + " 是质数");
    29. } else {
    30. System.out.println(number + " 不是质数");
    31. }
    32. }
    33. }

    题目二:

    获取当前日期是一年中的第几天

    解题思路:

    1. 获取当前日期的年份、月份和日子。
    2. 计算一月到当前月份之前的每个月的天数总和。这可以通过一个数组或一个switch语句来完成,每个月的天数在不同月份中是不同的。
    3. 加上当前月份的日子。
    4. 如果当前年份是闰年(leap year),并且当前月份在2月之后(即3月或更晚),则需要考虑闰年的特殊情况。在闰年中,2月有29天,而在平年中只有28天。
    5. 最后得到的总和就是当前日期是一年中的第几天。

    代码实操

    本地输出尝试一、

    这是第一种,能实现的,可以不符合题目的输出要求;

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. System.out.print("请输入年份:");
    6. int year = scanner.nextInt();
    7. System.out.print("请输入月份:");
    8. int month = scanner.nextInt();
    9. System.out.print("请输入日期:");
    10. int day = scanner.nextInt();
    11. scanner.close();
    12. int dayOfYear = calculateDayOfYear(year, month, day);
    13. System.out.println("这一天是这一年的第 " + dayOfYear + " 天");
    14. }
    15. public static int calculateDayOfYear(int year, int month, int day) {
    16. int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    17. int dayOfYear = day;
    18. for (int i = 1; i < month; i++) {
    19. dayOfYear += daysInMonth[i];
    20. }
    21. // 处理闰年的2月
    22. if (isLeapYear(year) && month > 2) {
    23. dayOfYear++;
    24. }
    25. return dayOfYear;
    26. }
    27. public static boolean isLeapYear(int year) {
    28. return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    29. }
    30. }
    输入测试:
    本地输出尝试二、

    例如:2023,8,7,然后程序将按照您的要求进行计算。注意,是用“,”,替代了Enter键,不需要输出中文,方法名为Main,需要自己手写要导什么包

    这是按照考试要求来的,可惜当时没时间了,现在做出了

    1. import java.util.Scanner;
    2. public class Main {
    3. public static void main(String[] args) {
    4. Scanner scanner = new Scanner(System.in);
    5. System.out.print("请输入年份,月份,日期(使用逗号分隔):");
    6. String input = scanner.nextLine();
    7. scanner.close();
    8. String[] parts = input.split(",");
    9. if (parts.length != 3) {
    10. System.out.println("输入格式不正确,请使用逗号分隔年份、月份和日期。");
    11. return;
    12. }
    13. int year = Integer.parseInt(parts[0]);
    14. int month = Integer.parseInt(parts[1]);
    15. int day = Integer.parseInt(parts[2]);
    16. int dayOfYear = calculateDayOfYear(year, month, day);
    17. System.out.println("这一天是这一年的第 " + dayOfYear + " 天");
    18. }
    19. public static int calculateDayOfYear(int year, int month, int day) {
    20. int[] daysInMonth = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
    21. int dayOfYear = day;
    22. for (int i = 1; i < month; i++) {
    23. dayOfYear += daysInMonth[i];
    24. }
    25. // 处理闰年的2月
    26. if (isLeapYear(year) && month > 2) {
    27. dayOfYear++;
    28. }
    29. return dayOfYear;
    30. }
    31. public static boolean isLeapYear(int year) {
    32. return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    33. }
    34. }
    输入测试:

    本地输出尝试三、

    另外的方法,当初属实忘记了(如果你准备参加蓝桥杯这个方法你就很熟悉了),就是使用Java的java.util.Calendar类或java.time.LocalDate类来完成

    1. import java.util.Scanner;
    2. public class DayOfYearCalculator {
    3. public static int getDayOfYear(int year, int month, int day) {
    4. int[] daysPerMonth = {
    5. 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31
    6. };
    7. int dayOfYear = day;
    8. for (int i = 1; i < month; i++) {
    9. dayOfYear += daysPerMonth[i];
    10. }
    11. // 处理闰年的情况
    12. if (isLeapYear(year) && month > 2) {
    13. dayOfYear += 1;
    14. }
    15. return dayOfYear;
    16. }
    17. public static boolean isLeapYear(int year) {
    18. return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
    19. }
    20. public static void main(String[] args) {
    21. Scanner scanner = new Scanner(System.in);
    22. // 设置逗号为分隔符
    23. scanner.useDelimiter(",");
    24. System.out.print("请输入日期(格式:年,月,日):");
    25. // 读取用户输入的整行内容
    26. String input = scanner.nextLine();
    27. // 使用逗号分割输入字符串
    28. String[] parts = input.split(",");
    29. if (parts.length != 3) {
    30. System.out.println("输入格式错误,请使用逗号分隔年、月、日。");
    31. } else {
    32. int year = Integer.parseInt(parts[0].trim());
    33. int month = Integer.parseInt(parts[1].trim());
    34. int day = Integer.parseInt(parts[2].trim());
    35. int dayOfYear = getDayOfYear(year, month, day);
    36. System.out.println("输入的日期是一年中的第 " + dayOfYear + " 天");
    37. }
    38. scanner.close(); // 关闭 Scanner
    39. }
    40. }
    输入示例:

  • 相关阅读:
    解决 Spark2.X 查询Hive分区表修改后的字段为null?
    Java文件为什么可以跨平台执行
    10 个最佳免费 PDF 压缩工具软件
    oepncv c++ 连通组件扫描
    DN-DETR: Accelerate DETR Training by Introducing Query DeNoising
    VM501开发套件开发版单振弦式传感器采集模块岩土工程监测
    Android Radio实战——打开Tuner(十八)
    MFC主框架和视类PreCreateWindow()函数学习
    微信图文如何替换成自己的二维码?
    Xcode14&iOS16对开发者的影响
  • 原文地址:https://blog.csdn.net/qq_57747969/article/details/133099743