2016-06-27 2 views
-3

Проблема с вероятностью рождения вот алгоритм, за которым я следую, бит, я все еще сталкиваюсь с проблемой. Алгоритм:java: Принятие в алгоритме?

  1. Для упрощения проблемы мы делаем предположение, что каждый день года (кроме 29 февраля) одинаково вероятен на день рождения. Мы рассмотрим только 365 дней в году.
  2. При генерации случайного дня рождения для человека генерируйте случайное целое число в диапазоне 0-364, каждый номер будет представлять собой отдельный день в году (0 для 1 января и 364 для 31 декабря). Мы будем использовать нулевые числа для соответствия индексированию массива.
  3. При выполнении одного симулятора помните, что вам нужно найти только одну пару подходящих дней рождения, чтобы подсчитать количество симуляторов. То есть, как только вы определяете, что у двух людей одинаковый день рождения, вы можете остановить текущую симуляцию и начать следующую симуляцию.
  4. Чтобы гарантировать, что программа каждого пользователя ведет себя одинаково (чтобы мы могли автоматически оценивать представление каждого), вам нужно создать новый случайный объект для каждого прогона моделирования, и вам нужно будет засеять случайный объект с количеством пробег, который вы имитируете (первый запуск симуляции будет использовать целое число 1 в качестве семени, второй запуск будет использовать 2 и т. д.). Вам нужно создать новый случайный объект для каждого прогона моделирования, а не по случайному номеру [не использовать метод Math.random() в этой программе].
  5. Во время одной симуляции вам нужно будет следить за днями, которые `` соответствуют дню рождения кого-то или же отслеживают количество дней рождения, которые происходят в любой день. Есть несколько структур, которые мы изучили в этом модуле MOOC, которые можно было бы легко решить для решения этой проблемы. Вы можете выбрать структуру по своему выбору. Обратите внимание, что цель состоит в том, чтобы просто определить, приходят ли два дня рождения в одну дату.
  6. При возврате окончательного результата возвращайте процент в диапазоне 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); 
} 


} 
+1

... Так что не работает в этом коде? Каков ваш реальный вопрос? – Shark

+0

Почему включен C++-тег? – Devolus

+3

это ваша домашняя работа? – yossico

ответ

0

Я подозреваю, что есть несколько вещей, которые не так, но вот первый один: Вы всегда добавлять number к bdays как только вы назначаете number. Затем вы затем уточните, есть ли number в bdays, что, конечно же, будет - поэтому вы получаете 100% -ную ставку соответствия. Что вам нужно сделать, это:

  1. Pick number
  2. Проверьте number уже в bdays, и увеличить счетчик, если он
  3. Добавить number в bdays
+0

for (int i = 0; i

+0

Это код, который знает, что я меняю его, но он все равно не дает правильного ответа. –

+0

@abubakaryousaf. Дает ли он тот же неправильный ответ или другой неправильный ответ? (Вы получите лучший результат, если вы дадите более описательную информацию, чем «это не сработает».) –