华为OD机试真题 Java 实现【数字游戏】【2023 B卷 100分】,附详细解题思路

在这里插入图片描述@TOC

华为OD机试 2023B卷题库疯狂收录中,刷题点这里

专栏导读

本专栏收录于《华为OD机试(JAVA)真题(A卷+B卷)》。

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

一、题目描述

小明玩一个游戏。

系统发1 + n 张牌,每张牌上有一个整数。

第一张给小明,后 n 张按照发牌顺序排成连续的一行。

需要小明判断,后 n 张牌中,是否存在连续的若干张牌,其和可以整除小明手中牌上的数字。

二、输入描述

输入数据有多组,每组输入数据有两行,输入到文件结尾结束。

第一行有两个整数 n 和 m,空格隔开。m代表发给小明牌上的数字。

第二行有n个数,代表后续发的n张牌上的数字,以空格隔开。

三、输出描述

对每组输入,如果存在满足条件的连续若干张牌,则输出1,否则输出0。

补充说明:

1 <= n <= 1000
1 <= 牌上的整数 <= 400000
输入的组数,不多于1000

用例确保输入都正确,不需要考虑非法情况。

四、解题思路

  1. 第一行输入两个整数 n 和 m,空格隔开;
  2. 第二行输入n个数,代表后续发的n张牌上的数字,以空格隔开;
  3. 定义num,存储计算连续数字之和;
  4. 定义flag,判断是否存在连续的若干张牌;
  5. 定义start,存储初始循环位置;
  6. 从第一个数开始循环,遍历后续发的n张牌上的数字;
  7. 循环一遍后,开始第二遍循环,起始位置+1;
  8. 判断是否存在连续的若干张牌,其和可以整除小明手中牌上的数字,跳出循环;
  9. 输出是否存在连续的若干张牌;

五、Java算法源码

package com.guor.od;

import java.util.Arrays;
import java.util.Scanner;

public class OdTest02 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int[] line = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();
        // n张牌
        int n = line[0];
        // 发给小明手上的牌
        int m = line[1];
        // 后续发的n张牌上的数字
        int[] nums = Arrays.stream(sc.nextLine().split(" ")).mapToInt(Integer::parseInt).toArray();

        // 计算连续数字之和
        int sum = 0;
        // 是否存在连续的若干张牌
        boolean flag = false;
        // 初始循环位置
        int start = 0;
        while (!flag){
            // 循环到最后一个结束
            if (start == n-1) {
                break;
            }
            // 因为必须是连续的,每次循环归0
            sum = 0;
            for (int i = start; i < n; i++) {
                sum += nums[i];
                // 存在连续的若干张牌,其和可以整除小明手中牌上的数字
                if(sum % m == 0){
                    flag = true;
                    // 用于跳出while循环
                    start = n-1;
                    System.out.println("sum--"+sum);
                    break;
                }
                // 循环一遍后,开始第二遍循环,起始位置+1
                if(i == n-1){
                    start++;
                }
            }
        }
        // 是否存在连续的若干张牌
        System.out.println(flag ? 1 : 0);
    }
}

六、效果展示

1、输入

6 7
3 12 3 2 2 5

2、输出

1

3、说明

华为OD机试真题 Java 实现【数字游戏】【2023 B卷 100分】,附详细解题思路_第1张图片


下一篇:华为OD机试真题 Java 实现【路灯照明问题】【2022Q4 100分】,感谢fly晨发现这个问题,并提供更优质的算法

本文收录于,华为OD机试(JAVA)真题(A卷+B卷)

刷的越多,抽中的概率越大,每一题都有详细的答题思路、详细的代码注释、样例测试,发现新题目,随时更新,全天CSDN在线答疑。

在这里插入图片描述

你可能感兴趣的:(搬砖工逆袭Java架构师,华为od,java,游戏,华为,程序人生,学习)