Member 14369312 Ответов: 4

Как это сделать? У меня есть ответы, но какой-то тестовый случай, когда я проваливаюсь и даю неправильный ответ, когда я его отправляю


Губка Боб Квадратные Штаны и лотерейные шары

Губка Боб Квадратные Штаны ждал в бильярдном клубе своего лучшего друга Патрика.
Когда ему наскучило ждать, он отправился на игру с лотерейными шарами, доступными в бильярдном клубе.
Там была сумка, наполненная N лотерейными шарами. Каждый шарик имеет определенное число от 1 до N, напечатанное на нем. Все числа различны. Губка Боб достал из сумки три шарика и взял их сумму. Теперь Губка Боб задался целью вычислить вероятность того, что сумма не будет больше заданного числа K(<=N). Он особенно настаивал на том, чтобы ответ отображался в виде p/q (за исключением случаев, когда ответ равен 0 или 1).
Можете ли вы помочь Губке Бобу в написании программы, которая облегчает задачу поиска вероятности?

входной формат :
Входные данные состоят из двух целых чисел, N и K. (0<=K<=N<=10000).

выходной формат :
Выведите результат в виде p/q (за исключением случаев, когда ответ равен 0 или 1).
См. примеры ввода и вывода для получения спецификаций форматирования.

Пример Ввода 1:
5 6
Пример Вывода 1:
1/10

Пример Ввода 2:
5 7
Пример Вывода 2:
1/5

Что я уже пробовал:

main()
{
 int n,k,b,c,d;
scanf("%d%d",&n,&k);
c=n+k;
b=c-10;
d=c-10;
printf("%d%d",b,d);
return 0;
}

Patrice T

Дайте образец ввода с неправильным выходом.

phil.o

Ваш алгоритм вычисления вероятности неверен. Вам понадобится гораздо больше, чем сложение и два вычитания :) вы записали это сначала на бумаге?

4 Ответов

Рейтинг:
1

Stefan_Lang

Приведенные вами примеры неверны. Наименьшая сумма, которую вы можете сгенерировать из трех отчетливый целые числа от 1 до N-это 1+2+3=6, поэтому не может быть последовательности с суммой 5! Кроме того, llimitation K<=N не имеет большого смысла! K должно быть в диапазоне 6 .. 3*N-3, потому что N+(N-1)+(N-2) = 3*N-3-это наибольшая сумма, которую вы можете вычислить из этих чисел.

Ваш код не имеет никакого отношения к этой проблеме! Вы должны проявлять больше усилий - все, что вы делаете, это просите других делать вашу домашнюю работу.

Я предлагаю вам написать программу для генерации всех допустимых комбинаций шаров, которые можно было бы нарисовать, подсчитать комбинации, вычислить сумму и подсчитать случаи, когда сумма не превышает К. Это не будет быстро, но должно дать вам правильные результаты.

Вот какой-то псевдокод, опуская ввод и инициализацию:

for (every valid sequence {first_number, second_number, third_number})
    increment sequence_counter
    sum = first_number + second_number + third_number
    if (sum <= K)
        increment sum_not_greater_counter
print sum_not_greater_counter / sequence_counter

Это уже большая помощь, чем вы заслуживаете за то, что не показываете никаких усилий. Но она настолько проста, что вы можете обнаружить, что можете применить ту же самую идею (генерируя все комбинации) и к другим проблемам.


Рейтинг:
1

Member 14549815

import java.util.Scanner;

/**
 *
 * @author abhimanyu
 */
public class spongebob {
    public static void main(String[] args)
    {
        int n, k,q,f,a,b,c,i,j,l,r=0,p=0,sum,num=0;
   Scanner sc = new Scanner(System.in);
   System.out.println("Enter value for k");
   k = sc.nextInt();
   System.out.println("Enter value for n");
   n = sc.nextInt();
   
   
   for(i=n;i>=1;i--)
   {   
   a=i-2;
   b=i-3;
   c=b*(b+1)/2;
   f=a+c;
   num=num+f;
   }
         for(i = 1; i <= n; i++){
			for(j = i; j <= n; j++){
				for(l = j; l <= n; l++){
					if(l != i && l != j && i != j)
                                        {
                                           r=i+j+l;
                                           if (r<=k)
            p=p+1;
                                        }
                                }
                        }
         }
        
            System.out.println(p+" "+num);
    }
}


CHill60

Необъяснимый дамп кода-это не решение проблемы!

Рейтинг:
0

Patrice T

Цитата:
У меня есть ответы, но какой-то тестовый случай, когда я проваливаюсь и даю неправильный ответ, когда я его отправляю
main()
{
int n,k,b,c,d;
scanf("%d%d",&n,&k);
c=n+k;
b=c-10;
d=c-10;
printf("%d%d",b,d);
return 0;
} 

Нет: эта программа не может получить некоторые правильные ответы, потому что она вообще не пытается справиться с проблемой.

Поскольку проблема исходит от сайта вызова, весь интерес заключается в том, что вы решаете проблему самостоятельно.

Совет: возьмите лист бумаги, карандаш и решите задачу вручную на каждую сумму с 10 шариками. И посмотрите, как все работает, это алгоритм.


Stefan_Lang

Вы уверены, что это с сайта вызова? Ни ограничение (K<=N) не имеет никакого смысла, ни образцы не являются правильными. Более того, какой сайт проблем программирования будет использовать Spongebob??

Patrice T

Формулировка типична для проблемных сайтов.
Я только сейчас понимаю, как это Губка Боб, по-французски он получил другое имя, к которому я привык.

Stefan_Lang

Я только что понял, что это действительно может быть из сайта вызова, из-за нечетного ограничения K<=N: с этим ограничением количество последовательностей, которые складываются не более чем в K, не зависит от N! И это значительно упрощает решение, если вы знаете, как это сделать.

Рейтинг:
0

Member 14515058

public static void main(String[] a)
   {
   int n, k, b, c, d, e;
   Scanner sc = new Scanner(System.in);
   System.out.println("Enter value for k");
   k = sc.nextInt();
   System.out.println("Enter value for n");
   n = sc.nextInt();

   c = n + k;
   b = n - k;
   d = c - b;

   System.out.println(b + " " + d);

   }


CHill60

Необъяснимый дамп кода-это не решение проблемы!

Stefan_Lang

Это далеко не правильное решение, не правильный язык, и никакой помощи вообще.