问题描述
我要写个函数a<b,有个数组arr,这个arr存储着一些数字,这些数字是1到10的,但其中某些数字可能有缺少的情况,不一定1到10每个都有,且按从小到大排列现在要从arr中抽出数字加给a,要求抽的次数是随机的,最后结果必须小于21,且大于b,而且在抽过程中,如果a小于16的话就不能停下,必须继续抽,如果a大于16的话则必须停止,arr中已经被抽过的数字要把它从数组中移除最后我想返回一个数组M,要让M里包含每次被抽到的数字,还要求抽的次数要随机,但不能大于5次,如果到了5次还没到目的的话也得停下来
解决方案
解决方案二:
importjava.util.*;importjava.io.*;publicclassProblem{/***@paramargs*/publicstaticvoidmain(String[]args)throwsIOException{//TODOAuto-generatedmethodstubinta,b;intcount;ArrayList<Integer>arrayList=newArrayList<Integer>(10);ArrayList<Integer>resultList=newArrayList<Integer>();for(inti=0;i<10;i++){intdata=(int)(Math.random()*10)+1;arrayList.add(data);}Collections.sort(arrayList);BufferedReaderin=newBufferedReader(newInputStreamReader(System.in));System.out.print("输入a:");a=Integer.parseInt(in.readLine());System.out.print("输入b:");b=Integer.parseInt(in.readLine());count=(int)(Math.random()*5)+1;inti=1;while(i<=count){if(a>16)break;intflag=(int)(Math.random()*(12-i)-1);intdata=(arrayList.get(flag)).intValue();a+=data;arrayList.remove(flag);resultList.add(data);i++;}System.out.println("此次抽的数目为:"+count);if(a<21&&a>b){System.out.println("抽数成功,结果是:"+resultList);}else{System.out.println("抽数失败!");}}}你的问题:抽过程中,抽的数目必须小于等于初始化的抽的数目,还是不管初始化的抽的数目,知道a>=16这个条件停止。我按第一个情况处理!
解决方案三:
b是什么?
解决方案四:
如果a本来就大于16,那就不用抽了
解决方案五:
是这个意思吗?int[]getArr(int[]arr,inta,intb){if(a>=b){returnnewint[0];}List<Integer>list=newArrayList<Integer>();Set<Integer>set=newHashSet<Integer>();for(inti=0;i<5;i++){intidx=(int)(Math.radom()*arr.length);if(set.contains(Integer.valueOf(idx))){continue;}if(a+arr[idx]>=21){continue;}list.add(Integer.valueOf(idx));a+=arr[idx];if(a>16){break;}}int[]result=newint[list.size()];for(inti=0;i<list.size();i++){result[i]=list.get(i).intValue();}returnresult;}//调用例子int[]arr={1,3,5,6,8,10};inta=(int)(Math.ramdon()*16);intb=a+(int)(Math.ramdon()*(21-a));int[]result=getArr(arr,a,b);System.out.println(Arrays.toString(result));
解决方案六:
int[]getArr(int[]arr,inta,intb){if(a>=b||a>=16){returnnewint[0];}List<Integer>list=newArrayList<Integer>();Set<Integer>set=newHashSet<Integer>();for(inti=0;i<5;i++){intidx=(int)(Math.radom()*arr.length);if(set.contains(Integer.valueOf(idx))){continue;}if(a+arr[idx]>=21){continue;}set.add(Integer.valueOf(idx));list.add(Integer.valueOf(arr[idx]));a+=arr[idx];if(a>16){break;}}