java:在算法中采用什么?

java:在算法中采用什么?,java,android,algorithm,Java,Android,Algorithm,生日概率问题 这是我遵循的算法,但我仍然面临这个问题。算法是 为了简化问题,我们假设一年中的每一天(2月29日除外)都有可能是生日。我们只考虑一年中的365天。 为一个人生成随机生日时,生成一个范围为0-364的随机整数,每个数字代表一年中的一天(1月1日为0,12月31日为364)。我们将使用从零开始的数字来匹配数组索引 执行单个模拟时,请记住,您只需找到一对匹配的生日即可使模拟生效。也就是说,一旦确定两个人的生日相同,就可以停止当前模拟并开始下一个模拟 为确保每个人的程序行为相同(以便我们可

生日概率问题 这是我遵循的算法,但我仍然面临这个问题。算法是

  • 为了简化问题,我们假设一年中的每一天(2月29日除外)都有可能是生日。我们只考虑一年中的365天。<李>
  • 为一个人生成随机生日时,生成一个范围为0-364的随机整数,每个数字代表一年中的一天(1月1日为0,12月31日为364)。我们将使用从零开始的数字来匹配数组索引
  • 执行单个模拟时,请记住,您只需找到一对匹配的生日即可使模拟生效。也就是说,一旦确定两个人的生日相同,就可以停止当前模拟并开始下一个模拟
  • 为确保每个人的程序行为相同(以便我们可以自动为每个人的提交评分),您需要为每个模拟运行创建一个新的随机对象,并且需要使用正在模拟的运行编号为随机对象设定种子(第一次模拟运行将使用整数1作为种子,第二次运行将使用整数2,以此类推)。您需要在每次模拟运行时创建一个新的随机对象,而不是根据所需的随机数[在此程序中不要使用Math.Random()方法]
  • 在一次模拟过程中,您需要跟踪与某人生日相对应的日期,或者跟踪在任何给定日期发生的生日数。我们在MOOC的本模块中研究了几种结构,可用于轻松解决此问题。您可以自由选择结构注意,目标是简单地确定两个生日是否在同一天
  • 返回最终结果时,返回0.0–100.0范围内的百分比
  • 在这里输入代码

            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