蓝桥杯:Python组再也不怕组合数计数

Posted 正在黑化的KS

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了蓝桥杯:Python组再也不怕组合数计数相关的知识,希望对你有一定的参考价值。

有一类题目是是这样的:要求我们从n个数中选m个,问共有多少种取法。

如果是用C++写的话,要应用到Lucas定理,暴力阶乘会超时。

这里给大家介绍一个Python3.8 math库自带的函数math.comb(n, m) 可以用于解决上述问题

具体用法请参照:Python math.comb() 方法 | 菜鸟教程

可以一并看一下math.perm函数:Python math.perm() 方法 | 菜鸟教程 并注意区分二者的区别。

math.comb(n, m) = 

math.perm(n, m) = 

我们来看一下蓝桥杯官方是否支持这个函数。

这里选用蓝桥杯练习系统:“组合数取模”这道题,题目链接:“蓝桥杯”练习系统 

Python3代码 

from math import comb

n,m,p = map(int,input().split())
print(comb(n,m) % p)

评测结果  

可以看到蓝桥杯官方是支持这个函数的

注:很多OJ的评测系统的Python版本可能较老,因此不支持这个函数,具体以蓝桥杯官方为准。

(蓝桥杯)试题 算法训练 数的计数

试题 算法训练 数的计数

资源限制
时间限制:1.0s 内存限制:128.0MB
试题来源
  NOIP2001 普及组

问题描述
  我们要求找出具有下列性质数的个数(包含输入的自然数n):
  先输入一个自然数n(n<=1000),然后对此自然数按照如下方法进行处理:
  1. 不作任何处理;
  2. 在它的左边加上一个自然数,但该自然数不能超过原数的一半;
  3. 加上数后,继续按此规则进行处理,直到不能再加自然数为止.
输入格式
  一个数n
输出格式
  一个数表示答案

样例输入

6
样例输出
6
样例说明
  满足条件的数为6,16,26,126,36,136

import java.util.Scanner;

public class Main {
    public static int count(int n){
        if(n == 1){
            return 1 ;
        }
        int s = 1 ;
       for(int i=1; i<=n/2; i++){
           s += count(i) ;
       }
       return s ;
    }
    public static void main(String[] args){
        Scanner input = new Scanner(System.in) ;
        int n = input.nextInt() ;
        System.out.println(count(n)) ;
    }
}

以上是关于蓝桥杯:Python组再也不怕组合数计数的主要内容,如果未能解决你的问题,请参考以下文章

(蓝桥杯)试题 算法训练 数的计数

第十一届蓝桥杯python组试题解答

2021年软件类第十二届蓝桥杯 省赛 python组 A-E题解

python蓝桥杯B组考前冲刺

蓝桥杯省赛真题12python数字组合 青少年组蓝桥杯python编程省赛真题解析

蓝桥杯选拔赛真题31python三位数组合个数 青少年组蓝桥杯python 选拔赛STEMA比赛真题解析