java:在算法中采用什么?
生日概率问题 这是我遵循的算法,但我仍然面临这个问题。算法是java:在算法中采用什么?,java,android,algorithm,Java,Android,Algorithm,生日概率问题 这是我遵循的算法,但我仍然面临这个问题。算法是 为了简化问题,我们假设一年中的每一天(2月29日除外)都有可能是生日。我们只考虑一年中的365天。 为一个人生成随机生日时,生成一个范围为0-364的随机整数,每个数字代表一年中的一天(1月1日为0,12月31日为364)。我们将使用从零开始的数字来匹配数组索引 执行单个模拟时,请记住,您只需找到一对匹配的生日即可使模拟生效。也就是说,一旦确定两个人的生日相同,就可以停止当前模拟并开始下一个模拟 为确保每个人的程序行为相同(以便我们可
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
import java.util.Set;
public class Logic {
public static void process(int size, int count)
{
int number = 0;
Set<Integer> bdays = new HashSet<>();
int x[] = new int[size];
Random random = new Random();
random.setSeed(1);
int matches = 0;
boolean out = false;
for (int i = 0; i < count; i++) {
for (int j = 0; j < size; j++) {
number=(random.nextInt(365)+1);
}
for (int j = 0; j < count; j++) {
if (bdays.contains(number)) {
matches++;
}
else
{ bdays.add(number);
out = true;
break;}
if (out) {
out = false;
break;
}
}
}
double prob = 100*(double) matches / count;
System.out.println("The probability for two students to share a birthday is " + prob + ".");
}
public static void main(String[] args) {
Scanner inp = new Scanner(System. in );
System.out.println("How many students?");
int num = inp.nextInt();
System.out.println("How many times?");
int times = inp.nextInt();
process(num,times);
}
}
import java.util.HashSet;
导入java.util.Random;
导入java.util.Scanner;
导入java.util.Set;
公共类逻辑{
公共静态无效进程(整数大小、整数计数)
{
整数=0;
Set bdays=new HashSet();
整数x[]=新整数[大小];
随机=新随机();
随机设定种子(1);
int匹配=0;
布尔输出=假;
for(int i=0;i
我怀疑有几件事是错误的,但这里有第一件事:你总是在分配编号后,将编号
添加到b天
。然后你再检查编号
是否在b天
中,当然会是这样-因此你会得到100%匹配率。你需要做的是:
选择number
检查number
是否已在b天
中,如果已在,则递增计数器
将编号
添加到b日期
那么……这个代码中什么是不可行的?你的实际问题是什么?为什么包括C++标签?这是你的作业吗?请求助于帮助中心来理解如何写“这个代码不起作用”。问题。提示:不是这样的。如果我给20组大小和10000个模拟,那么它会给我100个答案,但实际答案是41.24或其他一些。for(int i=0;i