知乎链接

问题描述

我和我女朋友的QQ号都是九位数字,这九个数字是有七个不同的数字组成的,我想问这种概率是多大,我们是不是特别我看缘分呢?求大神给算一下概率!

思路

定义问题:由7种数字组成的9位数一共有多少个?记做x,则答案为$\frac{x2}{C_{10}7 \times C_{10}^{18}}$

所以关键在于由7种数字组成的9位数一共有多少个

from collections import Counter

from scipy.special import comb as c, factorial as f

"""
我和我女朋友的QQ号都是九位数字,而这九个数字完全相同只是数字顺序不同,这九个数字是有七个不同的数字组成的,我想问这种概率是多大
""" def split(n, m):
"""
整数拆分,把整数n拆成m个整数之和的形式
:param n:
:param m:
:return:
"""
if m == 0: return
a = [1] * m
a[-1] = n - (m - 1)
yield a def can_increase(i):
# i是否有增长空间
if i == m - 1: return False
for j in range(i + 1, m):
if a[j] - a[i] > 1:
return True
return False while 1:
# 首先找到最后一个增长点
i = m - 1
while i >= 0 and not can_increase(i):
i -= 1
# 如果没有增长点,直接退出
if i == -1:
break
# 增长点增长,并且更改后续数组
a[i] += 1
for j in range(i + 1, m):
a[j] = a[i]
a[-1] = n - sum(a[:-1])
yield a def g(n, m):
"""
由m个正整数组成的n位数有多少个
:param n:
:param m:
:return:
"""
s = 0
for i in split(n, m):
number_left = m
position_left = n
now = c(10, m)
for j in i:
now *= number_left * c(position_left, j)
position_left -= j
number_left -= 1
for j in Counter(i).values():
now /= f(j)
s += now
return s def test():
for i in range(1, 15):
s = 0
for j in range(i + 1):
s += g(i, j)
if s != 10 ** i:
raise Exception("error {} {} {}".format(i, s, 10 ** i)) def find_rule():
ma = 30
table = [[0] * ma for _ in range(ma)]
for i in range(1, ma):
for j in range(1, i + 1):
table[i][j] = g(i, j)
for i in range(1, ma):
for j in range(1, i + 1):
print("%-8d" % (table[i][j] / table[i - 1][j]) if i > 1 and table[i - 1][j] else table[i][j], end=' ')
print()
for i in range(1, ma):
for j in range(1, i + 1):
print("%-8d" % table[i][j], end=' ')
print() test()
print(g(9, 7) ** 2 / c(10, 7) / 10 ** 18)
find_rule()

上述程序求解复杂度较高,实际上可以找到规律。用找到的规律可以飞快解决:由m种数字组成的n位数一共有多少种这种问题。

我找到的规律如下:

1、对于10进制来说,由11种数字组成的n位数个数为0,因为总共就10种数字,也就是说,整个表格只有前10列不为零

2、对于每列来说,最终都会变成等比数列,第i列的公比就是i

3、从左上角到右下角的斜线,呈现9、8、7、6、5、4、3、2、1、0的比例

由m种数字组成的n位数有多少个的更多相关文章

  1. CF D - Beautiful Graph(dfs 染色问题吧)给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法。

    题意: 给你一个图,每个节点可以赋值1,2,3三种数字,相邻的节点的和必须是奇数,问有多少中方法. 分析: 很容易就可以发现如果这个图中是有奇数的环的话,那这是肯定不行的 ,否则这个环的贡献是为2^s ...

  2. 页面加载后累加,自加1&&判断数字是否为两位数

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  3. 第2章-7 产生每位数字相同的n位数 (30分)

    第2章-7 产生每位数字相同的n位数 (30分) 读入2个正整数A和B,1<=A<=9, 1<=B<=10,产生数字AA-A,一共B个A 输入格式: 在一行中输入A和B. 输出 ...

  4. delphi Edit 控制最大值,只能输入数字型 控制小数位数

    delphi语言受众多程序员追捧,主要原因之一就是它有很多第三方的控件可供使用.很多资深的delphi程序员都把自己积累的函数.过程等设计成控件,以方便使用,提高开发效率. 本文通过一个只允许输入数字 ...

  5. Linux下科学计数法(e)转化为数字的方法 [shell中几种数字计算说明]

    科学计数法使用e标识数值,将科学计算学转化为数字的思路:按e右边的数字移动小数点位数.e右边的数字如果是负数,则向左移动小数点.示例如下: 1.2345678e2 = 123.45678 1.2345 ...

  6. [CareerCup] 5.5 Number of Converted Bits 转换数字所需的位数

    5.5 Write a function to determine the number of bits required to convert integer A to integer B.EXAM ...

  7. thinkjs——一个字段一种数字代表两种状态

    问题来源: 现有一张company数据表,其中有一个字段state(-2:待审核:-1:禁用:0:正常:1:会员过期:),一般而言,在前期设计数据表的时候,会将每种状态下都用一种特定的数字代表,但是这 ...

  8. PHP 数字补零 固定位数补0

    在处理订单编号的时候,需要固定位数的数字,比如需要固定四位数格式: 1->0001 56->0056 288->0288 1992->1992 可以使用php内置函数str_p ...

  9. 剑指offer——62数组种数字出现的次数

    题目描述 一个整型数组里除了两个数字之外,其他的数字都出现了两次.请写程序找出这两个只出现一次的数字. 题解: 我们想到异或运算的一个性质:任何一个数字异或它自己都等于0.也就是说,如果我们从头到尾依 ...

随机推荐

  1. 图片上传前预览、压缩、转blob、转formData等操作

    直接上代码吧: <template> <div> <div class="header">添加淘宝买号</div> <div ...

  2. MFC中打印对话框CPrintDialog类

    void CCPrintDialogView::OnPrint() { DWORD dwflags=PD_ALLPAGES|PD_NOPAGENUMS|PD_USEDEVMODECOPIES|PD_S ...

  3. ios 内存管理总结

    在ios 中 项目有两个内存管理方式 第一种,arc 方式,编译器编译时,自动给obj 加上 release  实现要求 1. 设置项目 将 Objective-C Automatic Referen ...

  4. c#:判断一个数组元素中否有重复元素

    给定一个数组,判定该数组中是否有重复元素. 判定该数组中是否有重复元素总结出以下实现方案: using System; using System.Collections.Generic; using ...

  5. SqlServer驱动包 Maven

    SqlServer驱动包 Maven 学习了:https://blog.csdn.net/wu843820873/article/details/50484623 mvn install: mvn i ...

  6. redis信息相关集群

    转: http://www.runoob.com/redis/redis-install.html //redis的安装与运维相关 http://zhou123.blog.51cto.com/4355 ...

  7. (转)Unity3D研究院之IOS&Android收集Log文件

    转自:http://www.xuanyusong.com/archives/2477 有段时间没有写过文章了,不知道大伙儿还记得雨松MOMO吗? 嘿嘿. 开发项目的时候尤其在处理与服务器交互这块,如果 ...

  8. O2O、C2C、B2B、B2C

    一.O2O.C2C.B2B.B2C的区别在哪里? O2O是Online to offline 分为四种运营模式 1.Online to offline 是线上交易到线下消费体验 2.Offline t ...

  9. Docker for windows可用性检查

    Docker for windows不太稳定,每次启动机器后, 等待Docker启动起来后,要进行如下的检查: Docker启动看,看看图标是否正常,如果是红色,或者报错就是有问题. 打开Hyper- ...

  10. C# 源码 AForge.NET

    AForge.NET是一个专门为开发者和研究者基于C#框架设计的,他包括计算机视觉与人工智能,图像处理,神经网络,遗传算法,机器学习,模糊系统,机器人控制等领域.这个框架由一系列的类库组成.主要包括有 ...