【来自媳妇的需求】PHP实现随机数和方程求解

  话说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访问就不错了,汗??

 

时间: 2024-10-25 05:24:35

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

HDU - 4712 Hamming Distance(坑爹的随机数算法 + 暴力求解)

Hamming Distance Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/65535 K (Java/Others) Total Submission(s): 1728    Accepted Submission(s): 680 Problem Description (From wikipedia) For binary strings a and b the Hamming distance is equa

轻量级过程改进之需求管理

需求管理在于管理产品研发过程中的客户需求,建立项目相关干系人对需求的共同理解,维护需求与所开发产品之间的一致性,并控制需求的变更.需求管理的重要性不言而喻,在前面讲到的项目启动.项目计划以及接下去要讲的项目监控这几个改进域中,客户需求都是我们开发工作的输入和基础,研发团队存在的意义也是围绕着客户的需求,以满足客户需求.提高客户满意度为工作的目标,项目管理团队更是如此.本文主要阐述在项目需求管理过程中涉及的主要规程.可能存在的问题.分析这些问题并提出相应的改进措施. 一. 需求管理的规程 关于需求

IT实施过程中如何管理业务需求

目前,大多数企业IT建设与管理都滞后于业务变革,更谈不上引领企业发展了.对于这些企业而言,IT对企业业务的支撑或者说推动,是由业务需求到了一定程度来决定的.总的来说,企业的IT发展将取决于业务需求,而不是IT投资. 企业的常规做法是比较典型的交钥匙工程,业务部门提需求,IT部门就去张罗方案论证并组织实施,业务部门最后验收评价和使用,IT部门负责系统维护和更新.这样做的结果往往是系统不好用,不适用,或者跟不上业务的发展,业务部门不愿意用,最终成为摆设,浪费了投资,而带来的唯一好处可能是给企业相关人

.NET平台机器学习

.NET平台机器学习资源汇总,有你想要的么? 接触机器学习1年多了,由于只会用C#堆代码,所以只关注.NET平台的资源,一边积累,一边收集,一边学习,所以在本站第101篇博客到来之际,分享给大家.部分用过的 ,会有稍微详细点的说明,其他没用过的,也是我关注的,说不定以后会用上.机器学习并不等于大数据或者数据挖掘,还有有些区别,有些东西可以用来处理大数据的问题或者数据挖掘的问题,他们之间也是有部分想通的,所以这些组件不仅仅可以用于机器学习,也可以用于数据挖掘相关的. 按照功能把资源分为3个部分,开

SWTBOK测试实践系列(7) -- 测试用例设计的参考输入有哪些?

不管是文档化的测试用例,还是存在于测试人员头脑中的测试想法和思维,针对测试对象的分析和设计都是整个测试过程的重要测试活动之一.在进行测试分析和设计之前,测试人员首先需要确定测试的需求来源,即测试用例设计需要参考哪些测试依据文档? 测试用例设计的输入文档是什么?测试人员头脑中第一个蹦出的参考依据就是需求规格说明.确实,需求文档是我们测试设计的最主要参考文档.但是,由于时间限制.成本限制和个人能力限制等方面的原因,提供完备的需求规格说明几乎是不可能的.现实情况是,需求规格说明常常是不全的.模糊的,甚

《算法精解 C语言描述》

算法设计的一般方法 随机法依赖于随机数的统计特性.一个应用随机法的例子是快速排序. 分治法 动态规划 贪心法 近似法——旅行商问题 指针 在C语言中,通常声明一个void指针来表示泛型指针. 对于泛型指针来说类型转换非常重要,因为只有告诉泛型指针通过何种类型来访问地址时,泛型指针才能正确取到值.这是由于泛型指针不会告诉编译器它指向的是何种类型数据,因此编译器不知道多少个字节要被访问.也不知道应该如何解析字节. 函数指针是指向可执行代码段或调用可执行代码段的信息块的指针. 例如,在下面一段代码中,

黄金价格的变化及其经济学原理分析

目录 1.黄金价格的变化 1.1 黄金价格的概念 1.2国际市场金价的变化 1.3中国市场的黄金价格的变化 2. 黄金的历史演变和属性演变 2.1金本位的确立 2.2 布雷顿森林体系的建立与崩溃 3.黄金的属性 3.1财富属性 3.2 货币属性 3.3商品属性 3.4 投资品属性 4.黄金的定价机制及其对黄金价格的影响 4.1伦敦黄金市场的定价机制 4.2苏黎士黄金市场的定价机制 4.3纽约黄金市场的定价机制 4.4香港金银业贸易场的定价机制 4.5上海黄金交易所定价模式 5. 黄金价格及其影响

软件开发中的11个系统思维定律

英文原文:11 Laws of The System Thinking in Software Development "我会更加努力地工作" -- 一匹名叫Boxer的马(出自乔治?奥威尔的<动物农庄>) 彼得?圣吉在其著作<第五项修炼>中提到的系统思维定律同样适用于软件开发. 1. 今日的问题源于昨日的解决方案(Today's problems come from yesterday's solutions) 当解决问题时,我们会感到很高兴.我们经常不考虑后

共享经济给制造业带来哪些福利?

共享经济已经不再是纸上谈兵,而是大笔大笔的资的投入,不仅自己欣欣向荣,更带给相关行业越来越多的福利,比如典型共享经济软件嘀嘀打车,表面来看,它给出租车行业带来重创,但长远来讲,它又带给出租车司机新的选择,越来越多的老司机难以承受出租车公司高额的份子钱,转战嘀嘀打车,而乘客受惠就更不用多提,至于说马云.马化腾们肯定会利用司机们存在支付宝和微信里的钱,再赚一笔,简直是一箭三雕的App:日前兴起的共享单车辐射出大范围的能量,相比于政府提供的公共自行车,它们真正解决了消费者城市中"最后一公里"