Этот вопрос закрыт для ответов, так как повторяет вопрос Как работать с большими числами в C++?
@rustam6548

Что не так с кодом для решения комбинаторной задачи?

Комбинаторная задача заключается в нахождении различных волейбольных партий с заданным счётом. Различные партии - это партии с различным порядком набора очков. Играют до 25 с разрывом очков минимум 2. Если счёт 24:24, то идёт партия до бесконечности, пока не будет разрыв в два очка.
Проблема заключается в той самой ничье. Я написал код, вроде работает правильно, но при счёте 38:40 должен быть ответ 528344738743910400, когда у меня... 528344738743910464. Два разряда отличаются в конце, и то я не знаю как не изменились другие, когда там идёт речь про умножение чисел больше миллиарда. Помогите, пожалуйста!
функция foo, которая ведёт счёт различных "подпартий" после счёта 24:24) :
long double foo(int score1, int score2, int limit1, int limit2) {
	if (score1 == limit1 && score2 == limit2) return 1;
	else if (abs(score1 - score2) >= 2) return 0;
	else if (score1 == limit1) return foo(score1, score2 + 1, limit1, limit2);
	else if (score2 == limit2) return foo(score1 + 1, score2, limit1, limit2);
	
	else return foo(score1 + 1, score2, limit1, limit2) + foo(score1, score2 + 1, limit1, limit2);
}

код из main (scoreT1 - количество очков первой команды, scoreT2 - второй команды, сначала ans присваивается количество различных партий со счётом 24:24, потом это значение умножается на количество различных "подпартий" после 24:24 до заданного счёта):
ans = factorial(48) / (factorial(24) * factorial(24));
ans *= foo(24, 24, scoreT1, scoreT2);
  • Вопрос задан
  • 110 просмотров
Ваш ответ на вопрос

Вопрос закрыт для ответов и комментариев

Потому что уже есть похожий вопрос.
Похожие вопросы