JZGKCHINA
工控技术分享平台
恭喜发财,文末有惊喜
1
问题描述
嘿!想象一下,有一个魔法口袋,里面装着 12 个球!已知其中 3 个是红的,3 个是白的,6 个是黑的。现在的任务是从这个神秘的口袋里任意抓出 8 个球,然后我们要搞清楚会有多少种有趣的搭配!
2
问题分析
首先,我们可以从 3 个红球中选出任意数量,然后再从 3 个白球中选择剩下的球,最后从 6 个黑球中选择填充剩余的位置。这样的组合方式会有很多!嘿嘿,你知道吗?这其实是一个数学问题,要去计算组合的可能性,所以我们要用一点小技巧来求解。
3
算法设计
由上述分析可知,红、白、黑三种颜色球的个数的取值范围已经确定了,现在要求的是所有可能的颜色搭配情况,因此可以使用循环结构检测 m、n 范围内的所有可能取值,再代入 8-m-n≤6 中进行验证,能够满足条件 8-m-n≤6 的那些 m、n 和 8-m-n 的组合即为问题的解。
4
确定程序框架
程序流程图如图 4.1 所示。
图 4.1 程序流程图
5
完整的程序
根据上面的分析,编写程序如下:
FUNCTION_BLOCK "三色球问题"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_IN_OUT
num : Int; // 数量
END_VAR
VAR
m : Int; // 红球
n : Int; // 白球
END_VAR
BEGIN
(*
从12个球中任取8个,红球m个,白球n个,黑球8-m-n个
m的取值范围为[0,3],因此n的取值范围为[0,3],黑球的个数小于等于6,即8-m-n≤6
*)
#num := 0;
FOR #m := 0 TO 3 DO
FOR #n := 0 TO 3 DO
IF 8 - #m - #n <= 6 THEN
#num += 1;
END_IF;
END_FOR;
END_FOR;
END_FUNCTION_BLOCK
6
运行结果
在博图下运行程序,结果如图 6.1 所示。从输出结果中可知,取出的 8 个球中,红、白、黑三色球可能的颜色搭配共有 13 种。
图 6.1 运行结果
7
惊喜
7.1
首先我们使用西门子 SCL 语言计算双色球中奖概率的程序:
FUNCTION_BLOCK "计算双色球的中奖率"
{ S7_Optimized_Access := 'TRUE' }
VERSION : 0.1
VAR_OUTPUT
probabilityofwinning : LReal; // 中奖概率,输出变量
END_VAR
VAR
n : Int := 33; // 共有几个数,总数目
k : Int := 6; // 选择几个,需要选出的数目
combinations : LInt := 0; // 有多少种可能性,组合数
numerator : LInt; // 分子,计算组合数的分子
denominator : LInt; // 分母,计算组合数的分母
i : Int; // 循环计数器变量
j : Int; // 循环计数器变量
END_VAR
BEGIN
#numerator := 1; // 分子初始化为1
#denominator := 1; // 分母初始化为1
FOR #i := #n TO (#n - #k + 1) BY -1 DO // 计算分子的阶乘
#numerator *= #i;
END_FOR;
FOR #j := 1 TO #k DO // 计算分母的阶乘
#denominator *= #j;
END_FOR;
// 计算33选6的可能数
#combinations := #numerator / #denominator;
// 显示百亿分之几的中奖概率
#probabilityofwinning := 10000000000 / (#combinations*16);
END_FUNCTION_BLOCK
7.2
运行结果为:
百亿分之564,有惊无喜,还是洗洗睡吧!
7.3
预测
虽然概率有点低,但是我命由我不由天
接下来我们使用python爬取双色球中奖号码的历史数据并保存,然后利用线性回归算法预测下期中奖号码,代码很长就不放上来了,网上有很多案例,有兴趣的同学可以尝试着自己编写一下。
预测结果为:
num 1 Intercept value 4.79516129032258 Coefficient [0.] Predicted value [4.79516129]
num 2 Intercept value 9.648387096774194 Coefficient [0.] Predicted value [9.6483871]
num 3 Intercept value 14.478225806451613 Coefficient [0.] Predicted value [14.47822581]
num 4 Intercept value 19.453225806451613 Coefficient [0.] Predicted value [19.45322581]
num 5 Intercept value 24.395967741935483 Coefficient [0.] Predicted value [24.39596774]
num 6 Intercept value 29.14758064516129 Coefficient [0.] Predicted value [29.14758065]
num 7 Intercept value 8.49758064516129 Coefficient [0.] Predicted value [8.49758065]
大家量力而行,反正我先冲了!