
小牛牛超市选品(Java/Py/C/C/Js/Go)华为OD机试真题 新系统 华为OD上机考试真题新系统 8月23号 100分题型华为OD机试新系统真题目录点击查看: 华为OD机试新系统真题题库目录机考题库 算法考点详解题目内容牛牛在超市采购商品每件商品有对应价格均为正整数。给定预算l i m i t limitlimit要求选出连续一段商品满足两条约束这段商品总价格严格大于l i m i t limitlimit这段商品中最贵商品价格≤ l i m i t \leq limit≤limit请找出满足以上两条规则的最短连续商品长度不存在合法区间输出0 00。约束条件0 l i m i t 100 0 limit 1000limit1000 n ≤ 10 0 n \leq 100n≤100 A i ≤ 10 0 A_i \leq 100Ai≤10输入描述参数 1商品数量n nn参数 2预算上限l i m i t limitlimit参数 3商品价格数组数组元素代表每件商品价格A i A_iAi输出描述合法最短区间长度无合法区间输出0 00样例1输入6 7 2 3 1 2 4 3输出3说明[ 4 , 3 ] [4,3][4,3]的和为7 77不满足严格大于7 77作废[ 2 , 4 , 3 ] [2,4,3][2,4,3]的和为9 7 9 797最大值4 ≤ 7 4 \leq 74≤7长度3 33[ 3 , 1 , 2 , 4 ] [3,1,2,4][3,1,2,4]的和为10 7 10 7107长度4 44最短合法长度为3 33样例2输入3 11 1 2 3输出0说明不满足l i m i t limitlimit约束题解思路暴力枚举题目说明n 10那么直接使用双重for循环枚举每个位置作为区间起始找到最短合法区间是完全可行的。定义res用于存储最短合法区间长度第一层从前往后枚举区间起点定义sum记录区间和第二层循环从起点开始往后移动, 累加价格。对于不同情况进行如下处理价值大于limit终止循环说明该起点区间没有合法区间。sum limit:说明已找到当前起点最短合法区间,尝试更新res,终止循环。如果不存在合法区间返回0.否则返回对应res即可。c#includebits/stdc.h#includevectorusingnamespacestd;intsolve(intn,intlimit,vectorintvalue){intresINT_MAX;// 枚举以i为起点for(inti0;in;i){intsum0;for(intji;jn;j){if(value[j]limit){break;}sumvalue[j];// 当前以i为起点的最短合法区间if(sumlimit){resmin(res,j-i1);break;}}}// 不存在合法区间if(resINT_MAX){return0;}returnres;}intmain(){intn,limit;cinnlimit;vectorintvalue(n);for(inti0;in;i){cinvalue[i];}coutsolve(n,limit,value);return0;}Javaimportjava.io.*;importjava.util.*;publicclassMain{staticintsolve(intn,intlimit,int[]value){intresInteger.MAX_VALUE;// 枚举以i为起点for(inti0;in;i){intsum0;for(intji;jn;j){if(value[j]limit){break;}sumvalue[j];// 当前以i为起点的最短合法区间if(sumlimit){resMath.min(res,j-i1);break;}}}// 不存在合法区间if(resInteger.MAX_VALUE){return0;}returnres;}publicstaticvoidmain(String[]args)throwsException{BufferedReaderbrnewBufferedReader(newInputStreamReader(System.in));String[]firstbr.readLine().split( );intnInteger.parseInt(first[0]);intlimitInteger.parseInt(first[1]);String[]secondbr.readLine().split( );int[]valuenewint[n];for(inti0;in;i){value[i]Integer.parseInt(second[i]);}System.out.print(solve(n,limit,value));}}Pythondefsolve(n,limit,value):resfloat(inf)# 枚举以i为起点foriinrange(n):sum_value0forjinrange(i,n):ifvalue[j]limit:breaksum_valuevalue[j]# 当前以i为起点的最短合法区间ifsum_valuelimit:resmin(res,j-i1)break# 不存在合法区间ifresfloat(inf):return0returnres n,limitmap(int,input().split())valuelist(map(int,input().split()))print(solve(n,limit,value))JavaScriptconstreadlinerequire(readline);constrlreadline.createInterface({input:process.stdin,output:process.stdout});constlines[];rl.on(line,(line){lines.push(line);});rl.on(close,(){const[n,limit]lines[0].split( ).map(Number);constvaluelines[1].split( ).map(Number);functionsolve(n,limit,value){letresInfinity;// 枚举以i为起点for(leti0;in;i){letsum0;for(letji;jn;j){if(value[j]limit){break;}sumvalue[j];// 当前以i为起点的最短合法区间if(sumlimit){resMath.min(res,j-i1);break;}}}// 不存在合法区间if(resInfinity){return0;}returnres;}console.log(solve(n,limit,value));});Gopackagemainimport(bufiofmtos)funcsolve(nint,limitint,value[]int)int{res:int(^uint(0)1)// 枚举以i为起点fori:0;in;i{sum:0forj:i;jn;j{ifvalue[j]limit{break}sumvalue[j]// 当前以i为起点的最短合法区间ifsumlimit{ifj-i1res{resj-i1}break}}}// 不存在合法区间ifresint(^uint(0)1){return0}returnres}funcmain(){in:bufio.NewReader(os.Stdin)varn,limitintfmt.Fscan(in,n,limit)value:make([]int,n)fori:0;in;i{fmt.Fscan(in,value[i])}fmt.Print(solve(n,limit,value))}C语言#includestdio.h#includelimits.hintsolve(intn,intlimit,int*value){intresINT_MAX;// 枚举以i为起点for(inti0;in;i){intsum0;for(intji;jn;j){if(value[j]limit){break;}sumvalue[j];// 当前以i为起点的最短合法区间if(sumlimit){intlenj-i1;if(lenres){reslen;}break;}}}// 不存在合法区间if(resINT_MAX){return0;}returnres;}intmain(){intn,limit;scanf(%d %d,n,limit);intvalue[n];for(inti0;in;i){scanf(%d,value[i]);}printf(%d,solve(n,limit,value));return0;}