求随机数相关的算法或思路。

了为客人访问 2010-05-17 07:04:03
小弟的问题是可以描述为:
现在有编号为1-20的20类不同的苹果,每次从这20类只取一个,(注意每种类型苹果个数不限)允许类型重复,
现在取上10次,要求取到的苹果的所有类型为一确定数,如8种,或者在一个区间上,如为5-8种。注意,是在取了10次的基础上。
然后还有一个随机数问题:
在上面的基础上,我现在已经有了10个苹果,他们的编号允许存在重复。现在分3次拿走完,每次拿若干个,怎样确定拿走的的苹果的编号?

...全文
123 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
茫茫大海 2010-05-17
  • 打赏
  • 举报
回复
哦,那就没办法了!下来再好好想想!
了为客人访问 2010-05-17
  • 打赏
  • 举报
回复
不行啊。
对于我的第一个算法要求:
第一:待取的集合是确定的(以不同的编码区别),即在确定的集合内随机获取。
第二:当取的次数一定时,取出的种类数也有一定限制。或为一个确定数,或者在一个区间。

对于我的第二个算法要求,我想过了,其实处理起来很简单:将待取的集合用“洗牌算法”处理过,在顺次取出即可。
茫茫大海 2010-05-17
  • 打赏
  • 举报
回复

import java.util.*;

public class Apple {
public static void main(String[] args) {
Random rd = new Random();
List<Integer> apples = new ArrayList<Integer>();

//随机生成取出的苹果的编号,并放入集合apples,也就是模拟题目中
//取苹果的操作。
int num;
for(int i=0; i<10; i++) {
num = rd.nextInt(20) + 1;//加1是为了防止出现编号为0的苹果
apples.add(num);
}

//第一次拿走苹果后,就从集合中删除,第二次从剩下的苹果中拿,
//第三次把剩下的全部拿走
int count;//拿走的苹果的编号
int[] arr = new int[apples.size()];//保存每一次拿走的苹果编号
int k;
for(int i=0; i<3; i++) {
if(i < 2) {//前两次拿苹果
num = rd.nextInt(apples.size() - 1);
for(int j=0; j<num; j++) {
count = rd.nextInt(num);
arr[j] = count;
System.out.println("第" + (i + 1) + "次拿出的苹果:" + apples.get(count)); //打印拿走的苹果编号
}
k = 0;
while(arr[k] != 0) {
apples.remove(arr[k]); //一次拿完后,从集中删除
k++;
}
} else {//第三次拿走剩下的苹果
for(int j=0; j<apples.size(); j++) {
count = apples.size() - 1;
System.out.println("第3次拿出的苹果:" + apples.get(count));
apples.remove(count);
}
}
}
}
}

这个应该能够满足楼主的需求!

62,621

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧