个人主页深夜coding算法 专栏系列2026年华为最新OD机试题库详解 一次订阅永久解锁 | 持续更新100篇 | 6语言全覆盖文章目录❄️前言☀️一题目描述 题目名称 题目内容 输入描述 输出描述 示例☀️二解题思路☀️三代码实现CJavaPython3C语言JavaScriptGo☀️四复杂度分析⭐ 五易错点坑1前缀和余数初始值坑2长度至少为2共勉❄️前言数字游戏考的是前缀和 同余定理。OD机试最爱在数组题里冷不丁塞个同余你得能认出来。☀️一题目描述 题目名称数字游戏 题目内容给定一个长度为 N 的正整数数组判断是否存在长度至少为 2的连续子数组其元素之和是 M 的倍数。若存在输出YES否则输出NO。 输入描述第一行两个整数 N 和 M第二行N 个正整数 输出描述输出YES或NO 示例输入 5 3 1 2 3 4 5 输出 YES 说明子数组 [2, 3, 4] 的和是 99%30☀️二解题思路同余定理如果prefix[i] % M prefix[j] % Mji那么sum(i1..j) % M 0。用哈希表记录每个余数首次出现的位置检查是否有距离 ≥ 2 的相同余数。☀️三代码实现C#includeiostream#includeunordered_mapusingnamespacestd;intmain(){intN,M;cinNM;unordered_mapint,intfirst;first[0]-1;intsum0;for(inti0;iN;i){intx;cinx;sum(sumx)%M;if(!first.count(sum))first[sum]i;elseif(i-first[sum]2){coutYESendl;return0;}}coutNOendl;}Javaimportjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intNsc.nextInt(),Msc.nextInt(),sum0;MapInteger,IntegerfirstnewHashMap();first.put(0,-1);for(inti0;iN;i){sum(sumsc.nextInt())%M;if(!first.containsKey(sum))first.put(sum,i);elseif(i-first.get(sum)2){System.out.println(YES);return;}}System.out.println(NO);}}Python3N,Mmap(int,input().split())arrlist(map(int,input().split()))first{0:-1}total0fori,xinenumerate(arr):total(totalx)%Miftotalnotinfirst:first[total]ielifi-first[total]2:print(YES);breakelse:print(NO)C语言#includestdio.hintmain(){intN,M,sum0,first[1024];for(inti0;i1024;i)first[i]-2;first[0]-1;scanf(%d %d,N,M);for(inti0;iN;i){intx;scanf(%d,x);sum(sumx)%M;if(first[sum]-2)first[sum]i;elseif(i-first[sum]2){puts(YES);return0;}}puts(NO);}JavaScriptconst[NM,arr]require(fs).readFileSync(0,utf-8).trim().split(\n);const[N,M]NM.split( ).map(Number);constnumsarr.split( ).map(Number);constfirst{0:-1};letsum0;for(leti0;iN;i){sum(sumnums[i])%M;if(!(suminfirst))first[sum]i;elseif(i-first[sum]2){console.log(YES);process.exit();}}console.log(NO);Gopackagemainimportfmtfuncmain(){varN,M,sumintfmt.Scan(N,M)first:map[int]int{0:-1}fori:0;iN;i{varxint;fmt.Scan(x)sum(sumx)%Mifpos,ok:first[sum];!ok{first[sum]i}elseifi-pos2{fmt.Println(YES);return}}fmt.Println(NO)}☀️四复杂度分析指标数值时间复杂度O(N)空间复杂度O(min(N, M))⭐ 五易错点坑1前缀和余数初始值first[0] -1处理从下标0开始的子数组。坑2长度至少为2条件i - first[sum] 2正确体现至少两个元素。共勉同余定理是OD机试前缀和题的隐藏考点认出来就赢一半。关于本专栏一次订阅永久解锁全部100篇真题详解6语言全覆盖Java | Python3 | C | C语言 | JsNode | Go
华为OD机试2025C卷-数字游戏[100分]( Java _ Python3 _ C++ _ C语言 _ JsNode _ Go)实现100%通过率
个人主页深夜coding算法 专栏系列2026年华为最新OD机试题库详解 一次订阅永久解锁 | 持续更新100篇 | 6语言全覆盖文章目录❄️前言☀️一题目描述 题目名称 题目内容 输入描述 输出描述 示例☀️二解题思路☀️三代码实现CJavaPython3C语言JavaScriptGo☀️四复杂度分析⭐ 五易错点坑1前缀和余数初始值坑2长度至少为2共勉❄️前言数字游戏考的是前缀和 同余定理。OD机试最爱在数组题里冷不丁塞个同余你得能认出来。☀️一题目描述 题目名称数字游戏 题目内容给定一个长度为 N 的正整数数组判断是否存在长度至少为 2的连续子数组其元素之和是 M 的倍数。若存在输出YES否则输出NO。 输入描述第一行两个整数 N 和 M第二行N 个正整数 输出描述输出YES或NO 示例输入 5 3 1 2 3 4 5 输出 YES 说明子数组 [2, 3, 4] 的和是 99%30☀️二解题思路同余定理如果prefix[i] % M prefix[j] % Mji那么sum(i1..j) % M 0。用哈希表记录每个余数首次出现的位置检查是否有距离 ≥ 2 的相同余数。☀️三代码实现C#includeiostream#includeunordered_mapusingnamespacestd;intmain(){intN,M;cinNM;unordered_mapint,intfirst;first[0]-1;intsum0;for(inti0;iN;i){intx;cinx;sum(sumx)%M;if(!first.count(sum))first[sum]i;elseif(i-first[sum]2){coutYESendl;return0;}}coutNOendl;}Javaimportjava.util.*;publicclassMain{publicstaticvoidmain(String[]args){ScannerscnewScanner(System.in);intNsc.nextInt(),Msc.nextInt(),sum0;MapInteger,IntegerfirstnewHashMap();first.put(0,-1);for(inti0;iN;i){sum(sumsc.nextInt())%M;if(!first.containsKey(sum))first.put(sum,i);elseif(i-first.get(sum)2){System.out.println(YES);return;}}System.out.println(NO);}}Python3N,Mmap(int,input().split())arrlist(map(int,input().split()))first{0:-1}total0fori,xinenumerate(arr):total(totalx)%Miftotalnotinfirst:first[total]ielifi-first[total]2:print(YES);breakelse:print(NO)C语言#includestdio.hintmain(){intN,M,sum0,first[1024];for(inti0;i1024;i)first[i]-2;first[0]-1;scanf(%d %d,N,M);for(inti0;iN;i){intx;scanf(%d,x);sum(sumx)%M;if(first[sum]-2)first[sum]i;elseif(i-first[sum]2){puts(YES);return0;}}puts(NO);}JavaScriptconst[NM,arr]require(fs).readFileSync(0,utf-8).trim().split(\n);const[N,M]NM.split( ).map(Number);constnumsarr.split( ).map(Number);constfirst{0:-1};letsum0;for(leti0;iN;i){sum(sumnums[i])%M;if(!(suminfirst))first[sum]i;elseif(i-first[sum]2){console.log(YES);process.exit();}}console.log(NO);Gopackagemainimportfmtfuncmain(){varN,M,sumintfmt.Scan(N,M)first:map[int]int{0:-1}fori:0;iN;i{varxint;fmt.Scan(x)sum(sumx)%Mifpos,ok:first[sum];!ok{first[sum]i}elseifi-pos2{fmt.Println(YES);return}}fmt.Println(NO)}☀️四复杂度分析指标数值时间复杂度O(N)空间复杂度O(min(N, M))⭐ 五易错点坑1前缀和余数初始值first[0] -1处理从下标0开始的子数组。坑2长度至少为2条件i - first[sum] 2正确体现至少两个元素。共勉同余定理是OD机试前缀和题的隐藏考点认出来就赢一半。关于本专栏一次订阅永久解锁全部100篇真题详解6语言全覆盖Java | Python3 | C | C语言 | JsNode | Go