清风吹吹吹 2019-10-12 09:07 采纳率: 44.4%
浏览 145
已采纳

求助CB 大佬快来!真的不懂了

//Test.cpp 求解组合数 例如求解从五个人里面挑选二个人的组合数
#include
using namespace std;
int fac(int k){
int f;
int n;
if(k==k-n)
f=1;
else
f=fac(k-1)*k;
return f;
}//此中k=5 我是先求解5*4;
int facc(int n){
int w;
if(n==0)
w=1;
else
w=facc(n-1)*n;
return w;//这里我是求解2的阶乘
}
int faccc(int d)
{ int f,w;
d=f/w;
return d;
}//此时我用(5*4)/2!
int main(){
int d,k,n;
cin>>k>>n;
cout<<"求解组合数为:"<<faccc(d);
return 0;
}//但是无论我怎么算结果始终为一 我这个算法可能很笨拙 刚入C++希望大佬指点一二。难道是我的n值一直发生了变化么,如果是,如何锁定n值。
希望大佬可以解释我这个问题 谢谢

  • 写回答

2条回答

  • JonathanYan 2019-10-12 09:12
    关注

    先把你的代码格式调了,放到代码片里
    没看懂你的代码在做什么,代码里没赋值就调用的比比皆是

    int n;
    if(k==k-n) //n没赋值就用了
    
    int f,w;
    d=f/w; //fw没赋值就用了
    
    int d,k,n;
    cin>>k>>n;
    cout<<"求解组合数为:"<<faccc(d);//d没赋值就用了
    

    不知道是格式问题还是你就没写,没赋值肯定是不能用的,出啥错都不奇怪
    求组合数可以用这两个方法,如果你还是对你的代码有疑问可以继续问。

    #include <iostream>
    
    using namespace std;
    
    int fac(int t){
        int n = 1;
        for( int i = 2; i <= t; i++)
            n *= i;
        return n;
    } 
    int facc(int k, int n){
        int a = 1, b = 1;
        for( int i = 1; i <= n && i < (k+1-i); i++){
            a *= (k+1-i);
            b *= i;
        }
        return a/b;
    }
    int main(){
        int k,n;
        cin >> k >> n;
        cout << fac(k) / fac(k-n) / fac(n) << endl; //数学方法
        cout << facc(k, n) << endl; //优化方法
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况