解决问题方法论之化繁为简 - 一道算法题rand5()到rand7()
来源:互联网 发布:sqlserver 对等发布 编辑:程序博客网 时间:2024/06/04 19:51
前天睡觉前浏览网页,看到下面的面试题:已知rand5()是产生1到5的随机数,怎么根据rand5()产生rand7()的随机数。
坐在电脑前想了一会,没思路,最后睡觉,快睡着的时候,迷迷糊糊地居然能想到解决办法(其实之前几次,算法思路都是这种情况下萌生的,也是服了我自己了)。下面把前后的思路写出来。
1.当时潜意识第一反应便是rand5()*7/5,结果当然是迅速否定了,这变成了不是求随机,而是求平均数。
2.能否用rand5()得出rand2(),然后两个一起做点事情?也否定了,这也是求平均数而已。
3.然后就想着把题目变得简单一点看看怎么做。如果是rand10()到rand5(),这就好办了,直接除以2就可以了。
4.那如果是rand11()到rand5()呢,也很简单,只要rand出来的是10或者以下的,就直接应用rand10到rand5的逻辑,如果是11的话,就再rand11()一次就好了,反复循环。
5.换句话来说,对于任何的randN到randM,只要N>M,都可以这样来解决。
6.所以现在的问题变成怎么让rand5生成一个大于rand7的随机数。
7.很自然地会想到rand25()
8.rand5()*rand5()会得出rand25()吗,显然不能
9.rand5()*5+rand5()呢?貌似有戏!但好像数组索引有点越界还是不够,不要紧,调整一下就可以了。
10.第二天睡醒后,用java写出算法并测试了一下,果然是符合的,问题解决。然后上网搜索一下,大家也是这么解决的。
这条问题本身不重要,重要的是这种思路:复杂的问题可以先尝试化为最简单的问题解决,再逐步把特定条件去掉。
- 解决问题方法论之化繁为简 - 一道算法题rand5()到rand7()
- 算法--rand5()产生rand7()
- 如何用随机函数rand5来构造随机函数rand7 一道经典的算法题
- rand5 rand7
- 从rand5到rand7的思路和代码验证
- 利用rand5()产生rand7().rand5()产生1到5的整数,rand7()产生1到7的整数.
- 利用rand5构造rand7
- rand5()构造rand7()
- rand5()生成rand7()
- rand5()构造rand7()
- 两个rand5生成rand7
- 给定RAND5,写出RAND7
- rand5产生rand7
- rand5()产生rand7()
- 使用rand5()生成rand7()
- rand5()生成rand7()
- Rand5() to Rand7()
- rand5()生成rand7()
- opencv3 绘制一维直方图-灰度直方图的绘制
- RuntimeException和Exception区别(运行时异常和普通异常)
- 一起talk C栗子吧(第五十八回:C语言实例--获取程序当前的工作路径)
- JAVA字符串与字符编码处理的终极解决
- Windows下把文件夹压缩成.tar.gz格式
- 解决问题方法论之化繁为简 - 一道算法题rand5()到rand7()
- opencv3 绘制一维直方图-灰度直方图的绘制-柱状图
- 【深入Java虚拟机】之一:Java内存区域与内存溢出
- 黑马程序员——Java基础---多线程(2)
- opencv3 计算二维直方图-H-S直方图
- ant编译web工程
- codeforces - 326B - Duff in Love(练习)
- iOS开发基本技能之JSON
- Build path entry is missing: org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.