首页 > ACM题库 > HDU-杭电 > HDU 1570 A C[解题报告] C++
2013
12-12

HDU 1570 A C[解题报告] C++

A C

问题描述 :

Are you excited when you see the title "AC" ? If the answer is YES , AC it ;

You must learn these two combination formulas in the school . If you have forgotten it , see the picture.

Now I will give you n and m , and your task is to calculate the answer .

输入:

In the first line , there is a integer T indicates the number of test cases.
Then T cases follows in the T lines.
Each case contains a character ‘A’ or ‘C’, two integers represent n and m. (1<=n,m<=10)

输出:

For each case , if the character is ‘A’ , calculate A(m,n),and if the character is ‘C’ , calculate C(m,n).
And print the answer in a single line.

样例输入:

2
A 10 10
C 4 2

样例输出:

3628800
6

2011-12-16 01:50:33

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1570

题意:算排列&组合数。数据忒小,不用考虑溢出。

代码:

# include <stdio.h>


int factorial[15] = {1, 1} ;


int main ()
{
    int i, T, a, b ;
    char ch ;
    for(i = 2 ; i <= 10 ; i++)
        factorial[i] = factorial[i-1] * i ;
    scanf ("%d%*c", &T) ;
    while (T--)
    {
        scanf ("%c %d %d%*c", &ch, &a, &b) ;
        if (ch == 'A') printf ("%d\n", factorial[a] / factorial[a-b]) ;
        else printf ("%d\n", factorial[a] / factorial[b] / factorial[a-b]) ;
    }
    return 0 ;
}

解题报告转自:http://www.cnblogs.com/lzsz1212/archive/2012/01/06/2314845.html


  1. 第二种想法,我想来好久,为啥需要一个newhead,发现是把最后一个节点一直返回到嘴上面这层函数。厉害,这道题之前没样子想过。