问题标题: 酷町堂:3986 计算组合数C(m, n)

0
0
已解决
李宜和
李宜和
高级启示者
高级启示者

3986   计算组合数C(m, n)

经验值:0 时间限制:1000毫秒

题目描述 Description

给定两个非负整数m和n,编写函数计算组合数C(m,n)的值。其中C(m,n)=m!/((m-n)!*n!)
n!指n的阶乘,n!=1*2*3*……*(n-2)*(n-1)*n

输入描述 Input Description

输入一行,两个数字,分别是m和n,数字之间用空格隔开

输出描述 Output Description

输出一行,一个数字

样例输入 Sample Input

3 2

样例输出 Sample Output

3

数据范围及提示 Data Size & Hint

0<=n<=m<=10

 

求思路(其中C(m,n)=m!/((m-n)!*n!)n!指n的阶乘,n!=1*2*3*……*(n-2)*(n-1)*n)我懵了


0
已采纳
被禁言 高乐彤
高乐彤
修练者
修练者
cin>>m>>n;
    int a=ans(m),b=ans(n),c=ans(m-n);
    cout<<a/(b*c);

核心

ans函数是求阶乘

高乐彤在2021-08-11 10:27:01追加了内容

注意:ans函数用递归超时!!!

一个班的,求采纳!

0
朱小川
朱小川
缔造者
缔造者

主函数外的核心

long long s=1;

for(int i=1;i<=n;i++){

s*=i;

}          //函数自己定义

 

主函数的核心

cout<<jc(m)/(jc((m-n))*jc(n));

0
王文博
王文博
缔造者之神
缔造者之神

阶乘函数:

long long f(int t)
{
    int sum=1;
    for(int i=1;i<=t;i++)
    {
        sum*=i;
    }
    return sum;
} 

这个很简单

0
0
李奕歌
李奕歌
初级天翼
初级天翼
long long jc(int n){
    long long s=1;
    for(int i=1;i<=n;i++){
        s*=i;
    }
    return s;
}

主函数核心:

cout<<jc(m)/(jc((m-n))*jc(n));

 

0
王文博
王文博
缔造者之神
缔造者之神

王子耀说你200,汪天琦200,我给你们多加点料,一人220

0
张展嘉
张展嘉
新手天翼
新手天翼
  • #include<iostream> #include<algorithm> using namespace std; int n; string a[10005]; string count(string &s){ int sum=0; string b; for(int i=0;i<s.size();i++){ if(s[i]>='0'&&s[i]<='9'){ b+=s[i]; } } return b; } int c(string &b){ int sum=0; for(int i=0;i<b.size();i++){ if(b[i]>='0'&&b[i]<='9'){ sum+=b[i]-'0'; } } return sum; } bool cmp(string a,string b){ if(c(a)!=c(b)){ return c(a)>c(b); }else if(count(a)!=count(b)){ return count(a)<count(b); } return a<b; } int main(){ cin>>n; getline(cin,a[1]); for(int i=1;i<=n;i++){ getline(cin,a[i]); } sort(a+1,a+n+1,cmp); for(int i=1;i<=n;i++){ cout<<a[i]<<endl; } }
0
张展嘉
张展嘉
新手天翼
新手天翼
#include<iostream>
#include<algorithm>
using namespace std;
int n;
string a[10005];
string count(string &s){
    int sum=0;
    string b;
    for(int i=0;i<s.size();i++){
        if(s[i]>='0'&&s[i]<='9'){
            b+=s[i];
        }
    }
    return b;
}
int c(string &b){
    int sum=0;
    for(int i=0;i<b.size();i++){
        if(b[i]>='0'&&b[i]<='9'){
            sum+=b[i]-'0';
        }
    }
    return sum;
}
bool cmp(string a,string b){
    if(c(a)!=c(b)){
        return c(a)>c(b);
    }else if(count(a)!=count(b)){
        return count(a)<count(b);
    }
    return a<b;
}
int main(){
    cin>>n;
    getline(cin,a[1]);
    for(int i=1;i<=n;i++){
        getline(cin,a[i]);
    }
    sort(a+1,a+n+1,cmp);
    for(int i=1;i<=n;i++){
        cout<<a[i]<<endl;
    }
}

 

我要回答