话说2015.11.06 ,北京下了第一场雪。16年的今天没下雪,但是雾霾还是不小的,帮媳妇整理她工作时,出现了下面的需求,便想到使用PHP来写程序来进行求解。

【需求】

1. 给出一个平均值X,反过来求出来,得到这个平均值X的三个数X1 ,X2, X3,最大值与最小值的差值要小于0.4(X1-X3都是保留1位小数的数)

2. 这三个数X1, X2, X3代表了三组数。满足下面的公式: X1 = [(m1 - m2)/(m1 - m0) ] * 100 (@1);

m0, m1, m2三个数的边界条件如下:

1)48<m0<51

 2)0.45<m1 - m1<0.55

 3)m1, m2, m3 都是4位的正小数

【实现】 

 根据需求,我想到了使用两个函数来进行处理。

1)一个是已知平均数,求得到这个平均数满足条件的三个数的函数 createX()

 2) 一个是已知X,求满足公式 (@1)和边界条件的三个小数 m0, m1, m2

下面是具体的代码实现,不足之处请指出

<?php

//运行
echo "开始运行 \n";
run();
echo "运行结束 \n"; function run()
{/*{{{*/
$data = array(40.9, 40.5, 44.3, 47.8, 48.5, 42.1, 46.2);
$res = array();
foreach($data as $key)
{/*{{{*/
echo "处理 {$key}\n";
$resX = createX($key);
foreach($resX as $keyX)
{
$keyStr = (string)$key;
$keyXStr = (string)$keyX;
$res[$keyStr][$keyXStr] = createParams4M($keyX);
} }/*}}}*/ error_log(print_r($res,true)."\n", 3, '/tmp/result.log');
var_dump(99999,$res);exit;
return $res;
}/*}}}*/ //1.产生平均数
function createX($ave)
{/*{{{*/
$sum = 3*($ave * 1000);
$x1 = $x2 = $x3 = 0;
$rand4X1X2 = rand(0, 300);
//$x2 > $x1 > $x3;
for($i=0; $i< $ave * 1000 + 550; $i++)
{
$x2 = $i;
$x1 = $x2 - $rand4X1X2;
$x3 = $sum -($x1 + $x2);
$positive = $x1 > 0 && $x2 > 0 && $x3 > 0;
$flag = ($x2- $x3 < 400 && $x2 - $x3 > 200); if($positive && $flag)
{
//echo "捕捉到\n";
$roundX1 = round($x1/1000, 1);
$roundX2 = round($x2/1000, 1);
$roundX3 = round($x3/1000, 1);
$res = array($roundX1, $roundX2, $roundX3);
$flag = $roundX1 != $roundX2
&& $roundX3 != $roundX2
&& $roundX3 != $roundX1;
if($flag)
{
//echo "捕捉到\n";
return $res;
}
}
} echo "Fail 未捕捉到\n";
return array($x1, $x2, $x3);
}/*}}}*/ //2.产生平均数
function createParams4M($aveX)
{/*{{{*/
$begin = 48000;
$end = 51000;
$m0 = $m1 = $m2 = 0;
$rand4M1M2 = rand(450, 550);
$m0 = rand($begin, $end);
$m1 = $m0 + $rand4M1M2;
$m2 = $m1 - (($m1 - $m0)*$aveX/100);
//echo "捕捉到\n";
return array(round($m0/1000, 4), round($m1/1000, 4), round($m2/1000, 4)); }/*}}}*/ ?>

【遇到的问题和不足之处】

1. 【数组key值不能相同】开始遇到的是 得到的平均数的原始三个值有可能有相同的,但是数组中的key是不能相同的,于是做了处理。

同时,key值做了 string的转化

2. 【小数处理】还有就是 因为涉及的是 4位的小数,循环遍历,满足条件输出不方便,就 乘以1000扩大倍数,最后再除以1000还原。

3. 【媳妇新的要求。。】最后就是 因为媳妇的需求还是会变化的,希望我 做成app性质的,这样她可以安装后,自己可以随时使用,

但是对于我这只懂PHP的猿来说,爱莫能助,最多就是 申请阿里云,搭建服务器,根据她变化的需求,服务端修改程序,web访问就不错了,汗

【来自媳妇的需求】PHP实现随机数和方程求解的更多相关文章

  1. 【转】来自《轻松scrum之旅》的敏捷开发总结

    敏捷开发的核心价值观是,软件开发最重要的是给用户提供有价值的.可以工作的软件.如何保证提供有价值的软件,是通过反馈机制来完成的.这一点,我们体会很深.自从采用敏捷开发以后,我们比以前更有意识地希望得到 ...

  2. JavaScript实现生成指定范围随机数和一个包含不重复数的随机数组

    目前JavaScript里面还没有现成的方法可以实现这个简单地需求,我们就需要自己写代码了. 在js中有个函数:Math.random() 这个函数可以生成 [0,1) 的一个随机数. 我们的简单的改 ...

  3. LoadRunner随机数

    需求:自定义随机数 方法: int randomnumber; randomnumber = rand()%+; //100到300的随机数 lr_output_message("ca:%d ...

  4. .NET平台机器学习资源汇总,有你想要的么?

    接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的, ...

  5. .NET平台机器学习

    .NET平台机器学习资源汇总,有你想要的么? 接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分 ...

  6. .NET平台机器学习资源汇总,有你想要的么?(转)

    出处:http://www.cnblogs.com/asxinyu/p/4422050.html 阅读目录 1.开源综合类 2.开源.NET平台非综合类 3.其他资源与技术博客 4.我的100篇博客之 ...

  7. 个人对sort()排序方法中比较函数一直很混乱,今日理清

    需求:使用随机数来打印出0-10,并排序. 代码: var a = new Array();var testArray = function() { while (1) { var b = parse ...

  8. LoadRunner录制图片验证码

    LoadRunner录制图片验证码 LoadRunner自身是无法捕获到图片验证码的,但是我们可以帮助LoadRunner来实现验证码的捕获. 1.图片验证码 图片验证码的产生来自服务器端,由服务器生 ...

  9. 常用SQL语句(工作)

    1. 经销商 按店铺交易量汇总 ) from bp_shop_info i left join ( select t.shop_id,sum(t.shop_cost) as summary from ...

随机推荐

  1. RabbitMQ Exchange & Queue Design Trade-off

    In previous post, I mentioned the discussion on StackOverflow regarding designing exchanges. Usually ...

  2. solve the problem of 'java web project cannot display verification code'

    my java code of the function: package com.util; import java.awt.Color; import java.awt.Font; import ...

  3. Maven 最佳实践

    持续不断地学习maven Maven是一个很好的工具,但同时也拥有陡峭的学习曲线.因此,将 http://books.sonatype.com/mvnref-book/reference/ 加入到你的 ...

  4. Sublime Text(2/3)编译lua

    想在subLime text 3中集成编译Lua(或其他语言)功能,只需要在Tool->Build System -> New Build System中将原来的 { "shel ...

  5. 美图WEB开放平台环境配置

    平台环境配置 1.1.设置crossdomain.xml 下载crossdomain.xml文件,把解压出来的crossdomain.xml文件放在您保存图片或图片来源的服务器根目录下,比如: htt ...

  6. c#方法

    1.引用型参数: 关键字:ref 2.输出型参数 关键字:out 例: double area(out double p) { double t=3.14*10; p=2*t*3.14; return ...

  7. CSS3总结 (帅哥)

    第1章CSS3简介 如同人类的的进化一样,CSS3是CSS2的"进化"版本,在CSS2基础上,增强或新增了许多特性, 弥补了CSS2的众多不足之处,使得Web开发变得更为高效和便捷 ...

  8. js的作业题

    <script type="text/javascript"> //var a=3; //switch(a) // { // case 1: // alert(&quo ...

  9. 统计Go, Go, Go

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢!   结束了概率论,我们数据之旅的下一站是统计.这一篇,是统计的一个小介绍.   统 ...

  10. 如何做优化,UITabelView才能更加顺滑 (转载)

    这篇文章是前两周@叶孤城叶大在微信群里面的分享,一直到这两天才翻出来研究.很多实用的东西,不过由于水平有限,有些地方没能翻译好,还请大家指正. 我已经在iOS这个最好的移动平台上有几年的开发经验了.在 ...