蓝桥杯: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组再也不怕组合数计数的主要内容,如果未能解决你的问题,请参考以下文章
2021年软件类第十二届蓝桥杯 省赛 python组 A-E题解