问个算法题,,,想了好多天都想不出方法!!望高手解答

问题描述

我要写个函数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;}}

时间: 2024-08-31 17:17:33

问个算法题,,,想了好多天都想不出方法!!望高手解答的相关文章

想问朋友面试中遇到的一个算法题:

问题描述 想问朋友面试中遇到的一个算法题: Write a program in Java to assess a given string whether it complies with following patterns. Return true if a given string complies with these patterns else false. N = N1 + N2 N>= N1 >= N2 where N is the Nth element in the str

数据库-想问一下这个题的正确答案,谢谢

问题描述 想问一下这个题的正确答案,谢谢 1. 关于Oracle中的实例描述,下列说法正确的是(多选):( ) A.实例是保存在硬盘上的文件,它不会随着数据库的启动/关闭而存在或消失. B.实例是内存中的结构,是一种访问数据库的方式. C.可以用语句Select instance_name FROM v$instance获得实例名. D.一个实例可以访问多个数据库. 解决方案 我认为选择AC,数据库实例,每个实例在硬盘上都有存储的地方.一个数据库可以有多个实例,但是未曾试过一个实例支持多个数据库

一个小岛-眼睛的颜色 算法题我的代码为什么不能通过???一个岛上有n个人

问题描述 眼睛的颜色 算法题我的代码为什么不能通过???一个岛上有n个人 一个岛上有n个人,每个人的眼睛要么是蓝色的,要么是黑色的,并且至少有一个人眼睛是蓝色的.每个人都知道至少一个人眼睛是蓝色的事实,但是不知道具体几个人眼睛是蓝色的.每天所有人互相见面,他们可以看到别人的眼睛的颜色,但是看不到自己眼睛的颜色.别人也不能告诉他眼睛的颜色.如果一个人推断出自己的眼睛是蓝色的,他就会在当天离开.求每个人离开在第几天. 输入格式: 多组数据,每组数据第一行是一个正整数n,表示人数.(2<=n<=10

算法题:poj 2541 Binary Witch(KMP水过,逆序转换)

链接: http://poj.org/problem?id=2541 分析与总结: 做这题估算了下复杂度,觉得无论KMP再怎么快,这题暴力也肯定要超时的. 想了很久也没想出个好办法,于是决定暴力之,但是TLE了....于是就放了几天.之后看了下discuss ,这题的正解应该是状态压缩dp,不过目前我还不懂,跪了. 之后百度发现也可以用KMP水过,虽然是因为数据水才过的,不过这种思路很巧妙,值得借鉴! 直接暴力是枚举字符串的后面13个的字母,然后再用KMP匹配,这样的话,就绪要枚举多次,分别是

经典算法题每日演练——第七题 KMP算法

原文:经典算法题每日演练--第七题 KMP算法       在大学的时候,应该在数据结构里面都看过kmp算法吧,不知道有多少老师对该算法是一笔带过的,至少我们以前是的, 确实kmp算法还是有点饶人的,如果说红黑树是变态级的,那么kmp算法比红黑树还要变态,很抱歉,每次打kmp的时候,输 入法总是提示"看毛片"三个字,嘿嘿,就叫"看毛片算法"吧. 一:BF算法      如果让你写字符串的模式匹配,你可能会很快的写出朴素的bf算法,至少问题是解决了,我想大家很清楚的知

java算法题,公司的笔试题

问题描述 java算法题,公司的笔试题 suppose you have N cakes, N is an interger>0 // at each time, you can either eat 1 cake, or 2 cakes or 3 cakes // PROBLEM: How many ways can you eat all N cakes // for example, N = 4, (1,2,1) and (1,1,2) are considered to be diffe

记一道毫无思路的算法题

今天贤内给了我一道很实际的算法题,把我彻底难住了,实在想不出来,于是写此博文以记之. 背景是这样的,现在有一个付款明细的Excel,里面有为哪个发票,哪个公司应付多少钱的明细,明细数据是62条,现在知道我们已经付出的金额为Sum,请问到底哪些发票是已付款的. 这是62条明细数据: 653165.00 356029.11 220896.45 146362.00 1847670.00 3018518.91 1347553.07 145010.74 339784.84 199350.28 120611

求助一道二维数组交换特定元素位置的算法题,谢谢大家!

问题描述 求助一道二维数组交换特定元素位置的算法题,谢谢大家! 刚试验了一下出了新问题- - 比如,一开始是左边的数组,我想"把2个0去掉,然后0上面的2就掉下来了",形成右边的新数组 然后我用了循环遍历,比如只看第二列,我的做法是"从下往上找,遇到0,就和0上面的数字交换",结果成了下面这个样子了- - 我有个改进想法是"还是从下往上找,遇到0之后判断上面的是不是0,如果是0,再继续向上再找,直到不是0,然后把这个数赋值给一开始那个0的位置",

时间复杂度-求教一个百度面试的算法题

问题描述 求教一个百度面试的算法题 一个有N个元素的一维数组(A[0],A[1], ..., A[n-1]),设计一个算法求解该数组最大子数组.(要求时间复杂度是O(n)) 解决方案 用动态规划http://www.cnblogs.com/xkfz007/archive/2012/05/17/2506299.html 解决方案二: http://www.ahathinking.com/archives/120.html 解决方案三: 哈,这道题啊,已经遇到好多次了,推荐一个很多人都在练习的网站,