开朗的网友112233 2024-04-20 19:54 采纳率: 55.6%
浏览 0

c++ 第二类Stirling数

第二类Stirling数

描述

n个有区别的球放到m个相同的盒子中,要求无一空盒,其不同的方案用S(n,m)表示,称为第二类Stirling数。

img

img

用例输入 1

7 4
用例输出 1

350

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-20 19:55
    关注

    引自免费微信小程序:皆我百晓生

    要计算第二类Stirling数 S(n, m),可以使用递归公式:

    [ S(n, m) = m \cdot S(n-1, m) + S(n-1, m-1) ]

    其中的基础情况是:

    [ S(n, 1) = 1 ] [ S(0, m) = 0 ] [ S(n, 0) = 0 ] (当m为0时,没有盒子,所以没有合法的分配方式)

    下面是一个C++函数实现,用于计算并返回S(n, m)值:

    #include <iostream>
    using namespace std;
    
    unsigned long long stirling_number_of_the_second_kind(int n, int m) {
        // 基础情况
        if (n == 0 || m == 0) return 0;
        if (n == m) return 1;
    
        // 递归公式
        unsigned long long result = m * stirling_number_of_the_second_kind(n - 1, m);
        result += stirling_number_of_the_second_kind(n - 1, m - 1);
    
        return result;
    }
    
    int main() {
        int n = 7, m = 4;
        cout << "S(" << n << ", " << m << ") = " << stirling_number_of_the_second_kind(n, m) << endl;
        return 0;
    }
    

    在这个代码示例中,我们定义了一个名为stirling_number_of_the_second_kind的函数,它接受两个整数参数n和m,并返回它们之间的第二类Stirling数。在主函数main中,我们设置了例子中的n和m值,然后调用了这个函数并打印结果。

    运行这段代码,将得到输出 S(7, 4) = 350,这与您提供的用例相符。注意,由于这些数字可能非常大,所以这里使用了unsigned long long类型来存储结果。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月20日

悬赏问题

  • ¥15 前端echarts坐标轴问题
  • ¥15 CMFCPropertyPage
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题
  • ¥15 谁会P4语言啊,我想请教一下
  • ¥15 这个怎么改成直流激励源给加热电阻提供5a电流呀
  • ¥50 求解vmware的网络模式问题 别拿AI回答
  • ¥24 EFS加密后,在同一台电脑解密出错,证书界面找不到对应指纹的证书,未备份证书,求在原电脑解密的方法,可行即采纳