进阶PAT 2021-11-11 18:01 采纳率: 78.4%
浏览 90
已结题

用C++实现计算的小程序

问题描述:
给定n,m,任务是计算答案
输入
在第一行,有一个整数T表示测试用例的数量
然后在T行中跟随T个案例
每个case包含一个字符'A'或'C',两个整数分别代表n和m(1<=n,m<=10)
输出
对于每种情况,如果字符是'A',则计算A(m,n),如果字符是'C',则计算C(m,n)
样例输入
2
一个 10 10
C 4 2

样例输出
3628800
6

  • 写回答

4条回答 默认 最新

  • 来把薯条 2021-11-11 20:48
    关注

    下面的这是代码

    #include <stdio.h>
    typedef long long ll;   // 题目范围其实用不到long long但是还是觉得ll保险
    
    ll A(ll a, ll b);   // 计算排列数
    ll B(ll a, ll b);   // 计算组合数
    ll jiecheng(ll n);  // 计算阶乘
    
    int main(void)
    {
        int test;
        scanf("%d", &test);
        while (test--)
        {
            char op[2]; // 为了方便读取所以定义了一个字符串
            ll n, m;
            scanf("%s", op);
            scanf("%lld%lld", &n, &m);
            if (op[0] == 'A')
                printf("%lld\n", A(n, m));
            else
                printf("%lld\n", B(n, m));
        }
        return 0;
    }
    
    ll A(ll a, ll b)
    {
        ll ans = 1;
        for (ll i = 0; i < b; i++, a--)
            ans *= a;
        return ans;
    }
    
    ll B(ll a, ll b)
    {
        return jiecheng(a) / (jiecheng(b) * jiecheng(a - b));
    }
    
    ll jiecheng(ll n)
    {
        ll ans = 1;
        for (ll i = 1; i <= n; i++)
            ans = ans * i;
        return ans;
    }
    

    运行结果

    img


    哪些地方理解不了可以在评论区提问!

    望采纳,谢谢

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月11日
  • 已采纳回答 11月11日
  • 创建了问题 11月11日

悬赏问题

  • ¥60 pb数据库修改或者求完整pb库存系统,需为pb自带数据库
  • ¥15 spss统计中二分类变量和有序变量的相关性分析可以用kendall相关分析吗?
  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路