清风吹吹吹 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条)

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突