1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
我的代码如下:
- <?php
- /*
- *1:要求在一组数中,插入一个新数,并维护原来的排序方式不变
- *系统环境:windows/linux
- *编译环境:php4/php5
- *输入参数:存放在in.txt,多个参数时空格分隔
- 参数1是一组数字,中间用逗号分割,按照数字升序或者降序排列
- 参数2是一个数字
- 例如格式:1,3,4,7,8 5
- 输出:out.txt
- */
- $params=getParams(2);
- //排序默认为升序,-1表示未知,true表示升序,false 表降序
- $isOrderAsc=-1;
- $argv0=trim(trim($params[0]),",");
- $argv1=trim($params[1]);
- //检查参数1
- if(!preg_match_all("/^((\d+),?)+$/i", $argv0,$matches))
- {
- error_msg("params 1 must is group of numbers,break with ;");
- }
- //检查参数2
- if(!is_numeric($argv1))
- {
- error_msg("params 2 must be a numbers");
- }
- //把参数1转为数组
- $numbers=split(",",trim($argv0, ","));
- $tmp_numbers=$numbers;
- //判断是不是升序
- if(sort($tmp_numbers,SORT_NUMERIC) && $tmp_numbers===$numbers)
- {
- $isOrderAsc=true;
- }else if(rsort($tmp_numbers,SORT_NUMERIC) && $tmp_numbers===$numbers)
- {
- //判断是不是降序
- $isOrderAsc=false;
- }
- if($isOrderAsc===-1)
- {
- error_msg("params 1 must order by asc or desc");
- }
- array_push($numbers,$argv1);
- if($isOrderAsc)
- {
- sort($numbers,SORT_NUMERIC);
- }else{
- rsort($numbers,SORT_NUMERIC);
- }
- //输出结果
- output(join(",",$numbers),true);
- error_msg("execute success");
- /*
- 从in.txt里读取参数
- */
- function getParams($paramNum)
- {
- $in=file_get_contents("in.txt");
- if($in===FALSE){
- error_msg("cannot read in.txt,please check in.txt exists\n");
- }
- $in=preg_replace("/(\s+)/i", " ", $in);
- //多个参数时,按照空格分隔
- $parms=split(" ",trim($in));
- if($parms===FALSE)
- {
- error_msg("cannot get param from in.txt\n");
- }
- if(count($parms) < $paramNum)
- {
- error_msg("it needs $paramNum params\n");
- }
- return $parms;
- }
- /*
- 把结果输出到输出文件里
- 当isClean=true时清空out.txt
- */
- function output($msg,$isClean=false)
- {
- if($isClean)
- {
- $handle = fopen('out.txt', 'w');
- fclose($handle);
- }
- error_log($msg."\n", 3, "out.txt");
- }
- function error_msg($msg,$is_Exit=true)
- {
- if($is_Exit)
- exit($msg."\n");
- else
- echo $msg."\n";
- }
- ?>