小A買彩票-(組合數)


鏈接:https://ac.nowcoder.com/acm/contest/549/C
來源:牛客網

題目描述

小A最近開始沉迷買彩票,並且希望能夠通過買彩票發家致富。已知購買一張彩票需要3元,而彩票中獎的金額分別為1,2,3,4元,並且比較獨特的是這個彩票中獎的各種金額都是等可能的。現在小A連續購買了n張彩票,他希望你能夠告訴他至少能夠不虧本的概率是多少。

輸入描述:

NA一行一個整數N,為小A購買的彩票數量

輸出描述:

a/bA11/100/1輸出一個最簡分數a/b,表示小A不虧本的概率。若概率為1,則輸出1/1,概率為0,則輸出0/1。
示例1

輸入

2

輸出

3/8

備注:

0n30
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<queue>
#define ll long long
#define inf 0x3f3f3f3f
using namespace std;

ll C[40][40];
ll n,minn,maxx;

void init()
{
    memset(C,0,sizeof(C));
    for(int i=0;i<=40;i++)
        C[i][0]=1;
    for(int i=1;i<=40;i++)
        for(int j=1;j<=i;j++)
        C[i][j]=C[i-1][j-1]+C[i-1][j];
}

ll gcd(ll a,ll b)
{
    if(b==0)
        return a;
    return gcd(b,a%b);
}

int main()
{
    init();
    while(scanf("%lld",&n)!=EOF)
    {
        minn=3*n;
        maxx=4*n;
        ll ans=0;
        for(ll k=minn;k<=maxx;k++)
        {
            for(ll a=0;a<=n;a++)
                for(ll b=0;b<=n;b++)
                    for(ll c=0;c<=n;c++)
                        for(ll d=0;d<=n;d++)
                        {
                            if(a+2*b+3*c+4*d==k && a+b+c+d==n)
                            {
                                ans+=C[n][a] * C[n-a][b] * C[n-a-b][c] * C[n-a-b-c][d];
                            }
                        }
        }
        ll sum=1;
        for(int i=1;i<=n;i++)
            sum=sum*4;
        int g=gcd(sum,ans);
        printf("%lld/%lld\n",ans/g,sum/g);
    }
    return 0;
}
View Code

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM