동전 던지기의 절반만큼 머리를 얻을 확률을 계산하십시오.


10

표준 입력에서 작은 양의 짝수 정수를 제공하면 많은 동전을 뒤집 으면 머리의 절반이 될 확률을 계산하는 프로그램을 작성하십시오.

예를 들어, 2 개의 동전이 주어지면 가능한 결과는 다음과 같습니다.

HH HT TH TT

여기서 H와 T는 머리와 꼬리입니다. 코인 수의 절반에 해당하는 2 개의 결과 ( HTTH)가 있습니다. 총 4 개의 결과가 있으므로 확률은 2/4 = 0.5입니다.

이것은 보이는 것보다 간단합니다.

테스트 사례 :

2 -> 0.5
4 -> 0.375
6 -> 0.3125
8 -> 0.2734375

1
우리는 동전이 완벽하다고 생각할 수 있으며 머리 나 꼬리를 얻을 수있는 가능성이 있습니까?
Juan

출력을 stdout으로 인쇄해야합니까?
Dogbert

@Juan 예. @Dogbert 예.
david4dev

솔루션을 검증하기 위해 더 많은 테스트 사례를 얻을 수 있습니까?
Dogbert

@Dogbert-완료
david4dev

답변:


3

J, 22 19 (킬러 접근)

내 Haskell 답변을 골라내는 동안이 문제를 해결했습니다.

%/@:>:@i.&.(".@stdin)_

( 다른 J 답변 과 동일한 I / O )


이것은 나에게 오류를 준다 :0 1|domain error: script | %/ >:i.&.(".@stdin)_
david4dev

@ david4dev 아야. 남은 스크립트 파일도 작동하지 않았습니다. 내가 엉망인 곳을 기억하지 못하지만 테스트 한 버전이 실제로 잘못되었습니다. 이제 수정되었습니다.
JB

3

Pari / GP- 32 30 34 자

print(binomial(n=input(),n\2)/2^n)

와우, 나는 이항 함수가 내장 된 프로그래밍 언어를 고려하지 않았습니다.
david4dev

32 자 : print(binomial(n=input,n\2)/2^n).
Charles

3

파이썬 53 자

i=r=1.;exec"r*=(2*i-1)/i/2;i+=1;"*(input()/2);print r

3

엑셀, 25

그러나 사양에 따르면 :)

셀 이름을 n지정한 다음 다른 셀에 다음을 입력하십시오.

=COMBIN(n,n/2)/POWER(2,n)

2
Excel은 실제로 ^를 올바르게 구현하므로 그런 식으로 몇 글자를 잘라낼 수 있습니다.
SuperJedi224

3

하스켈, 39 43 46

main=do x<-readLn;print$foldr1(/)[1..x]

데모:

$ runhaskell coins.hs <<<2
0.5
$ runhaskell coins.hs <<<4
0.375
$ runhaskell coins.hs <<<6
0.3125
$ runhaskell coins.hs <<<8
0.2734375

오류가 발생했습니다 :Undefined variable "readln"
david4dev

@ david4dev 'L' readLn은 대문자입니다.
JB

나는 main=do x<-readLn;print$foldr1(/)[1..x]똑같은 일을하고 3 바이트를 절약 한다고 생각 합니까?
Lynn

과연. 합병, 감사합니다!
JB

2

J, 25 (자연적 접근)

((!~-:)%2&^)&.(".@stdin)_

샘플 사용 :

$ echo -n 2 | jconsole coins.ijs 
0.5
$ echo -n 4 | jconsole coins.ijs
0.375
$ echo -n 6 | jconsole coins.ijs
0.3125
$ echo -n 8 | jconsole coins.ijs 
0.273438

그것은 모두 설명이 필요하지만 책임이 거의 없습니다.

  • !~ -:이항 (x, x / 2) 으로 생각할 수 있습니다
  • % 2&^" 2 ^ x 로 나눔 "
  • &. (". @ stdin) _ I / O 용

2

GNU 옥타브-36 자

disp(binopdf((n=input(""))/2,n,.5));


2

골프 스크립트-30 자

제한-63 미만의 입력에 대해서만 작동

'0.'\~..),1>\2//{{*}*}%~\/5@?*

테스트 사례

$ echo 2 | ruby golfscript.rb binom.gs 
0.50
$ echo 4 | ruby golfscript.rb binom.gs 
0.3750
$ echo 6 | ruby golfscript.rb binom.gs 
0.312500
$ echo 8 | ruby golfscript.rb binom.gs 
0.27343750

분석

'0.'GS는 부동 소수점을하지 않으므로이 후 정수를 작성하여 위조합니다
\~. 입력을 스택의 상단으로 가져 와서 정수 로 변환
..합니다. 입력의 사본 2 개를
),1>만듭니다.에서 목록을 만듭니다
\2//. 1..n / 2와 n / 2 + 1..n으로 나열합니다.
{{*}*}%(n / 2)를주는 두 하위 목록 의 요소를 곱하십시오! 그리고 n! / (n / 2)!
~스택
\에서이 두 숫자 추출
/Divide
5@?*Multiply 주위의 두 숫자 를 5 ** n으로 바꿉니다. 이것은 위에 주어진 제한의 원인입니다


왜 제한이 궁금합니다. Gosper의 핵을 사용하여 모든 조합을 생성하고 있습니까? 아이디어가 나에게 발생했습니다 (사양은 실행 시간에 대해 아무 말도하지 않습니다).
피터 테일러

Golfscript에는 부동 소수점 변수 클래스가 없으므로 문자열 뒤에 쓴 정수가 0.답의 10 진수 부분을 계산 하지만 확률이 10 % 미만으로 증가하면이 방법은 필수 0을 생략합니다.
aaaaaaaaaaaa

@Peter, eBusiness의 말 :)
gnibbler

2

TI-BASIC, 10

프로그램 헤더가 있지만 10 바이트의 코드 만 있기 때문에 10 바이트 이상의 계산기 메모리가 필요합니다.

binompdf(Ans,.5,.5Ans

//Equivalently:

2^~AnsAns nCr (.5Ans

이것은 형식으로 입력을받습니다 [number]:[program name]; 입력 명령을 추가하면 3 바이트가 더 사용됩니다. ~단항 빼기 토큰입니다.


1

루비 -50 57 54 자

p (1..(n=gets.to_i)/2).reduce(1.0){|r,i|r*(n+1-i)/i/4}

확률이 아닌 nCr을 계산합니다.
david4dev

@ david4dev가 수정되었습니다.
Dogbert

1

J, 20

f=:(]!~[:<.2%~])%2^]

예 :

f 2
0.5
f 4
0.375
f 6
0.3125
f 8
0.273438

질문은 기능이 아닌 STDIN의 입력을 요구합니다.
Dogbert

@Dogbert : 알아요; 나는 이것을 언급하는 것을 잊었다. 나는 그것을 업데이트하려고했습니다 ...
Eelvex

1

APL 21 15 자

((N÷2)!N)÷2*N←⎕

제대로 렌더링되지 않는 곳

((N{ColonBar}2)!N){ColonBar}2*N{LeftArrow}{Quad}

{}의 모든 부분은 여기 와 같은 APL 특정 기호 입니다.


마지막 문자는 정사각형이어야합니까?
JB

네, 쿼드 심볼이어야합니다.
jpjacobs

내가 얻을�[token]: � undefined
david4dev

이것이 코딩 문제라고 생각합니다. NARS2000 에서는 그대로 붙여 넣기 할 수 있습니다.
jpjacobs

1

윈도우 PowerShell, 45

($p=1)..($n="$input"/2)|%{$p*=(1+$n/$_)/4}
$p

Meh.



0

포스트 스크립트, 77

([)(%stdin)(r)file token{2 idiv}if def
1
1 1[{[exch div 1 add 4 div mul}for
=


0

자바 스크립트, 86 바이트

a=prompt(f=function(n){return n?n*f(n-1):1});alert(f(a)/(f(a/2)*f(a/2)*Math.pow(2,a)))

0

파이썬 3, 99

이것은 순진한 접근 방식이며 fR0DDY의 솔루션은 훨씬 더 시원하지만 적어도 해결할 수는 있습니다.

여기 사용해보십시오

from itertools import*
n=int(input())
print(sum(n/2==i.count("H")for i in product(*["HT"]*n))/2**n)

파이썬 2, 103

from itertools import*
n=int(raw_input())
print sum(n/2==i.count("H")for i in product(*["HT"]*n))/2.**n

0

목표 -C :

152함수에 대해서만 148 바이트입니다.

클래스 메소드, 헤더 및 UI는 코드에 포함되지 않습니다.

입력 : int 동전 수를 결정 값.

출력 : float확률을 결정 하는 값.

-(float)calcPWithCoins:(int)x {int i=0;int j=0;for (int c=x;c<1;c+-){i=i*c;} for(int d=x/2;d<1;d+-){j=j*d;} return (((float)i/(float)j)/powf(2,x));}

언 골프 드 :

-(float)calcPWithCoints:(int)x
{
    int i = 0;
    int j = 0;
    for (int c = x; c < 1; c+-) {
         i = i * c;
    }
    // Calculate the value of x! (Factorial of x)

    for (int d = x / 2; d < 1; d+-)
         j = j * d;
    }
    // Calculate (x/2)! (Factorial of x divided by 2)

    return (((float)i / (float)j) / powf(2, x));
    /* Divides i! by (i/2)!, then divides that result (known as the nCr) by 2^x.
    This is all floating-point and precise. If I didn't have casts in there,
    It would be Integer division and, therefore, wouldn't have any decimal
    precision. */
}

이것은 Microsoft Excel 답변을 기반으로합니다 . C와 Objective-C에서 알고리즘을 하드 코딩하는 것이 어려운 과제입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.