dnartz 最近的时间轴更新
dnartz

dnartz

V2EX 第 144221 号会员,加入于 2015-10-24 21:37:27 +08:00
dnartz 最近回复了
2017-11-09 20:19:56 +08:00
回复了 alwayshere 创建的主题 程序员 后端 PHP 给浏览器发送一个密钥,怎样才尽可能不被发现?
迪菲-赫尔曼密钥交换,但是如果没有 HTTPS 证书信任,浏览器还是有可能被中间人劫持。
2016-02-11 19:19:01 +08:00
回复了 SuperFashi 创建的主题 奇思妙想 自己做的小解谜游戏:拿支付宝红包口令
啊不用了我明白了
2016-02-11 19:18:09 +08:00
回复了 SuperFashi 创建的主题 奇思妙想 自己做的小解谜游戏:拿支付宝红包口令
嘿嘿,那五个字符给点提示嘛~~~
不少 JS 的 MVVM 库都在属性里用了竖线“|”啊。。。
2015-10-30 16:12:56 +08:00
回复了 lygmqkl 创建的主题 程序员 [讨论]如何能稳定的生成 带正负号的四则运算?
2015-10-30 16:10:44 +08:00
回复了 lygmqkl 创建的主题 程序员 [讨论]如何能稳定的生成 带正负号的四则运算?
可以考虑这样一个函数,返回一个以非叶子节点为运算符,叶子节点为数字(含正负号)的语法抽象树。
tree F(int c, int nOptr) ->
operator = +-*/ 随机生成一个
int a, b;
tree left, right;

a = rand(1,c);
switch operator
b 为算符的右操作数,我们在这个 switch 里根据 operator 反推出 a

// 如果我们满足继续拆分一个数字的条件,就继续拆分这个数字
// 拆分的条件就要依楼主的需求而确定了
// 比如只生成 n 个数字,那么我们可以引入一个参数 int nOptr
// 我们用随机函数将 int nOptr 划分为 nOptr1 和 nOptr2
// 表示以 operator 为根节点的语法树左右两侧可以拥有的算符的数目,如果 nOptr1 或者 nOptr2 为 0 ,那就不拆分对应的数字
// 显然地,一个含有 n 个数字的算式,最多只可能有 n-1 个四则运算符(不是括号)
// 所以对于一个含有 n 个数字,最后运算结果为 c 的算式,我们应该这样调用 F : F(c, n-1)
nOptr1 = rand(1, nOptr)
nOptr2 = nOptr - nOptr1
if nOptr1 > 0
left = f(a, nOptr1)
else
left = new leafNode(a)
if nOptr2 > 0
right = f(b ,nOptr2)
else
right = new leafNode(b)

在生成语法树之后,我们也就可以生成算式了

在执行完这个算法之后,我们就可以通过这个语法树生成一个算式了
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2773 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 13ms · UTC 15:05 · PVG 23:05 · LAX 07:05 · JFK 10:05
Developed with CodeLauncher
♥ Do have faith in what you're doing.