知乎链接

问题描述

我和我女朋友的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. Distinct Subsequences leetcode java

    题目: Given a string S and a string T, count the number of distinct subsequences of T in S. A subseque ...

  2. Centos7下yum安装配置nginx与php

    实现LNMP环境搭建. 开始安装Nginx和PHP-FPM之前,首先卸载系统中以前安装的Apache和PHP保证安装不会冲突.用root登录输入下面的命令: yum remve httpd* php* ...

  3. C#与Visual Basic的异与同

    C#是一种高级程序设计语言,是一种安全.稳定.简单.优雅的编程语言,它与Visual Basic有很多相同的地方,同时也有很多不同的地方.我们今天这篇博客本着学习C#的原则,着重介绍一下C#与Visu ...

  4. MFC中卡拉OK字体的定时器实现,使用DC的DrawText函数实现

    void CTextView::OnTimer(UINT_PTR nIDEvent) { m_nWidth += ; // 在构造函数中初始化为 0: CClientDC dc( this ); TE ...

  5. 深度学习哪家强?吴恩达、Udacity和Fast.ai的课程我们替你分析好了

    http://www.jianshu.com/p/28f5473c66a3 翻译 | AI科技大本营(rgznai100) 参与 | reason_W 引言 过去2年,我一直积极专注于深度学习领域.我 ...

  6. Android Fragment的使用(转载)

    可以分为下面的几部分: 使用支持库 创建一个Fragment 创建一个动态UI 多个Fragment之间的通信 1.使用支持库 如果您的应用需要运行在3.0及以上的版本,可以忽略这部分内容. 如果您的 ...

  7. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(六)针对spark2.2.1以yarn方式启动spark-shell抛出异常:ERROR cluster.YarnSchedulerBackend$YarnSchedulerEndpoint: Sending RequestExecutors(0,0,Map(),Set()) to AM was unsuccessful

    Spark以yarn方式运行时抛出异常: [spark@master bin]$ cd /opt/spark--bin-hadoop2./bin [spark@master bin]$ ./spark ...

  8. windows 通过Web.config添加mimetype映射

    在Web.config里添加以下代码即可 <configuration> <system.webServer> <staticContent> <!-- re ...

  9. Shader开发工具: PVRShaman

    1. A PVRShaman (.POD) workspace is provided as an example in the Chapter_10/PVR_LinearFog folder tha ...

  10. 数据驱动测试二:使用TestNG和CSV文件进行数据驱动

    转载:https://blog.csdn.net/heart_1014/article/details/52013173 使用@DataProvider注解定义当前方法中的返回对象CSV文件(存放测试 ...