免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 草上飞2008
打印 上一主题 下一主题

大赛评选结果已出,敬请关注!:PHP编程大赛隆重启动,PHP开发大挑战 [复制链接]

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
121 [报告]
发表于 2010-09-28 20:09 |只看该作者
我也来做几道试试看。环境:Linux 2.6.32-24-generic #43-Ubuntu GNU/Linux
------------------------------------------------------------------第二题-------------------------------------------------------------------------
<?php
/*2.用二分法查找所需元素
*
* (C) rubylc_Unix
*/
function Bsearch($a, $input)
{       
        $head = 0;
        $tail = count($a) - 1;//尾部定位
        while($head <= $tail)
        {       
                $mid = intval(($head + $tail) / 2);
                if($input < $a[$mid])
                        $tail = $mid - 1;
                else if($input > $a[$mid])
                        $head = $mid + 1;
                else
                        return $mid;
        }
        return -1;
}

$arr = array( 4, 6, 8, 12, 20 ,25, 100);
$mid = Bsearch($arr, 25);
printf("the number $arr[$mid] is the %dth number of the array!", $mid + 1);
?>
-----------------------------------------------------------第三题---------------------------------------------------------------------------
<?php
/*
*3.打印一个杨辉三角
*
*(C) rubylc_Unix
*/
function triangle_yang($floornum)
{
        $array = array();
        for($i = 0; $i < $floornum; $i++)
                for($j = 0; $j <= $i; $j++)
                {
                        if(($j ==0) || ($i == $j))
                                $array[$i][$j] = 1;
                        else       
                                $array[$i][$j] = $array[$i - 1][$j - 1] + $array[$i - 1][$j];
                }
       for($i = 0; $i < $floornum; $i++)
        {
                for($j = 0; $j <= $i; $j++)
                {
                     printf("%8d", $array[$i][$j]);
                }
                echo "<Br>";
        }
}

$num = 10;
triangle_yang($num);
?>
-------------------------------------------------------------第二十四题------------------------------------------------------------------
<?php
/*24.三个数字求最大值
*
*(C) rubylc_Unix
*/
function  getMax($num1, $num2, $num3)
{
        return (($num1 > $num2 ? $num1 : $num2) > $num3)?($num1 > $num2 ? $num1 : $num2) : $num3;
}

echo getMax(61, 12, 24);
?>
--------------------------------------------------------第二十七题-----------------------------------------------------------------------
<?php
/*27.数组排序(从小到大)
*
*(C) rubylc_Unix
*/
function sortnumber($a)
{
        $len = count($a);//获取数组长度以便排序
        for($i = 1;$i < $len; $i++ )//使用的是直接插入排序
        {
                $temp = $a[$i];
                $j = $i - 1;
                while($j >= 0 && $temp < $a[$j])
                {
                        $a[$j + 1] = $a[$j];
                        $j--;
                }
                $a[$j + 1] = $temp;
        }

        return $a;
}

$a = array(4, 3, 8, 9, 2);
$a = sortnumber($a);
for($i = 0; $i < count($a); $i++)
{
        printf("%5d", $a[$i]);
        echo "<Br>";
}
?>
-------------------------------------------------------------第三十二题------------------------------------------------------------------
<?php
/*32.排序
*
*(C) rubylc_Unix
*/
function SelectSort($arr, $count)
{               
        for($i = 0; $i < $count -1; $i++)
        {
                $k = $i;
                for($j = $i + 1; $j < $count; $j++)//用的是直接选择排序
                        if($arr[$j] < $arr[$k])
                                $k = $j;
                if($k != $i)
                {
                        $temp = $arr[$i];
                        $arr[$i] = $arr[$k];       
                        $arr[$k] = $temp;
                }
        }

        return $arr;
}

$arr = array(6, 8, 7, 9, 0, 1, 3, 2, 4, 5);
$arr = SelectSort($arr, 10);
for($i = 0; $i < 10; $i++)
        printf("%5d--->", $arr[$i]);

?>
-----------------------------------------------------------------------------------------------------------------------------------------------

论坛徽章:
1
CU十二周年纪念徽章
日期:2013-10-24 15:41:34
122 [报告]
发表于 2010-09-28 21:32 |只看该作者
-------------------------------------------------------------第十一题 ------------------------------------------------------------------
<?php
/*11.百钱百鸡问题
*
*(C) rubylc_Unix
*/   
        for ($i = 0; $i < 33; $i++) //公鸡的数目
                for ($j = 0; $j < 20; $j++)//母鸡的数目
                {
                        $k = 100 - $i - $j;//小鸡的数目               
                        if($k % 3 == 0 &&  $i * 3 + $j * 5 + $k / 3 == 100)
                             echo "公鸡:" . $i . "只,母鸡:" . $j ."只,小鸡:" . $k ."只。<Br>";
                }

?>
---------------------------------------------------------------------------------------------------------------------------------------------

论坛徽章:
0
123 [报告]
发表于 2010-09-28 21:34 |只看该作者
本帖最后由 hu198021688500 于 2010-09-28 21:55 编辑

回复 3# renxiao2003

很多题如果经过数学分析,效率会很高

例如  第11题

公鸡X
母鸡Y
小鸡Z
X+Y+Z=100
3X+5Y+1/3Z=100
9X+15Y+Z=300
8X+14Y=200
4X+7Y=100
Y最大14,因为4X为偶数,100为偶数,所以7X也为偶数,则Y也为偶数
Y可取0,2,4,6,8,10,12,14
经验证
X=25,Y=0,Z=75
X=18,Y=4,Z=78
X=11,Y=8,Z=81
X=4,Y=12,Z=84

for($y=0;$y<=14;$y=$y+2){
    if((100-7*$y)%4==0){
        $x=(100-7*$y)/4;
        $z=100-$x-$y;
        echo '公鸡'.$x.'只';
        echo '母鸡'.$y.'只';
        echo '小鸡'.$z.'只';
        echo '\n';
  }
}

论坛徽章:
0
124 [报告]
发表于 2010-09-28 22:09 |只看该作者
本帖最后由 fansekey 于 2010-09-29 08:33 编辑

  1. <?php
  2. function insert_new_val($arr, $new_val) {
  3.     $high = count($arr) - 1;
  4.     $low  = 0;
  5.     $mid = 0;
  6.     $res = 0;
  7.     while ($low <= $high) {
  8.         $mid = (int)($low + ($high - $low) / 2);
  9.         if ($arr[$high] <= $new_val) {
  10.             $res = $high + 1;
  11.             break;
  12.         }
  13.         if ($arr[$low] >= $new_val) {
  14.             $res = $low;
  15.             break;
  16.         }
  17.         if ($arr[$mid] > $new_val)
  18.             $high = $mid - 1;
  19.         else if ($arr[$mid] < $new_val)
  20.             $low = $mid + 1;
  21.         else {
  22.             $res = $mid;
  23.             break;
  24.         }
  25.     }
  26.     if ($res > count($arr) - 1)
  27.         $arr[] = $new_val;
  28.     else if ($res < 0)
  29.         array_unshift($arr, $new_val);
  30.     else {
  31.         array_splice($arr, $res, 0, array($new_val));
  32.     }
  33.     return $arr;
  34. }

  35. $arr = array(1, 2, 3, 4, 5, 6, 8, 44, 55, 100, 300);
  36. var_dump($arr);
  37. var_dump(insert_new_val($arr, 7));
  38. var_dump(insert_new_val($arr, -100));
  39. var_dump(insert_new_val($arr, 44));
  40. var_dump(insert_new_val($arr, 4000));
  41. ?>
复制代码
第一题,没有测过。应该会出现问题……

论坛徽章:
0
125 [报告]
发表于 2010-09-28 22:14 |只看该作者
回复 3# renxiao2003
第一次分开数组这个用array_slice不是更好,还有如果直接知道一个位置想插入一个元素,感觉用array_splice也可以啊。-> array_splice(array,offset,length,array)

论坛徽章:
0
126 [报告]
发表于 2010-09-29 09:16 |只看该作者
回复 119# surpass_li


   我的任务就是, 你们答完题我负责汇总,然后呢,还负责奖品哦··

论坛徽章:
0
127 [报告]
发表于 2010-09-29 10:10 |只看该作者
奖品太廉价了。

论坛徽章:
0
128 [报告]
发表于 2010-09-29 13:12 |只看该作者
回复 127# jimnopq


    奖品的性质不管价格是廉价还是昂贵,重要的是代表我们对所有答题者的一份心意,也是对他们成果的一点表示,而且我们所提供的奖品还是很实用的哦····你觉得呢?

论坛徽章:
0
129 [报告]
发表于 2010-09-29 15:14 |只看该作者
回复  surpass_li


   我的任务就是, 你们答完题我负责汇总,然后呢,还负责奖品哦··
魔法鱼。 发表于 2010-09-29 09:16



    呵呵,关注

论坛徽章:
0
130 [报告]
发表于 2010-09-29 21:01 |只看该作者
回复 124# fansekey

靠,刚才看到自己写的代码不符合题意。先鄙视一下……继续写!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP