本帖最后由 cpmwp 于 2011-05-31 18:32:33 编辑

解决方案 »

  1.   

    if(count($sum[$i])>count($sum[$j]))//下标越界
    ------------------------------------------------
    当$i到达了数组最后一个位置,$j = $i+1,那$sum[$j]不就越界了么
      

  2.   

    你可以多多看看手册里的array_前缀的函数,会有很多收获
    方法很多的。。
    $array = 'csdn is a good place';
    $words = explode(' ',$array);
    function longestWord( $a,$b)
    {
        $al = strlen( $a );
        $bl = strlen( $b );
        return $al > $bl ? -1 : ($al == $bl ? 0 : 1);
    }
    usort($words,'longestWord');
    print_r( $words[0]);
      

  3.   

    for($i=0;$i<$num-1;$i++)
    {
    for($j=$i+1;$j<$num;$j++)
    {
      

  4.   

    <body>
    <form id="form1" name="form1" method="post" action="">
      <table width="509" height="51" border="1" align="center">
      <tr>
      <td height="45">请输入字符串</td>
      <td><input name="str" type="text" id="str" /></td>
      <td><input type="submit" name="Submit" value="提交" /></td>
      </tr>
      </table>
      <div align="center"><span class="STYLE1">注:输入字符串以空格分开 </span>
      </div>
    </form>
    <?php
    if(isset($_POST['Submit']))
    {
      echo "<center>";
      $str=$_POST['str'];
      $str1= explode(" ",$str);//转换成数组
      $num=count($str1);  for($i=0;$i+1<$num;$i++){
    if(strlen($str1[$i])>strlen($str1[$i+1]))
    {
    $str1[$i+1]=$str1[$i];
    }
    }
    echo $str1[$num-1];
    }?>
    </body>第一题稍微改了下,for($j=$i+1;$i<$num;$j++)你这个循环都是死的
      

  5.   

    第二题有点意思。
    $money = '345.78';
    $rmb['yuan']  = array(100,50,20,10,5,2,1);
    $rmb['jiao']  = array(5,1);
    $rmb['fen']   = array(5,1);$my    = explode('.',$money);
    $yy    = $my[0];
    $jf    = $my[1];
    function computeMoney( $money , $type)
    {
        $yy = $money;
        foreach( $GLOBALS['rmb'][$type] as $v)
        {
            if( $yy >= $v)
            {
                $t[$v.$type] = floor($yy / $v);
                $yy    = $yy - $v * $t[$v.$type];
            }
        }
        return $t;
    }
    echo "<pre/>";
    print_r(computeMoney($yy, 'yuan'));
    print_r(computeMoney($jf{0}, 'jiao'));
    print_r(computeMoney($jf{1}, 'fen'));
    第三题没看明白。
      

  6.   

    我也发现了,你的结果不包括20元的,话说rmb是有20元的。
    你把$rmb['yuan']  = array(100,50,20,10,5,2,1);数组里的20去掉,结果就和你提供的一致了。
      

  7.   

    如果你可以放弃你的思路,那么
    $ar = split(" +", 'csdn is a good place');
    rsort($ar);
    echo '最长的单词:'.$ar[0];
      

  8.   

    本帖最后由 xuzuning 于 2011-05-31 20:53:52 编辑
      

  9.   

    第3题
    如果输入的是 xyz 你打算如何处理?
      

  10.   

    能否实现下列输出格式,345.78=100*3+10*4+5*1+0.5*1+0.1*2+0.01*8
    我写的:echo $n1."=100*".$r[100]."+50*".$r[50]."+10*".$r[10]."+5*".$r[5]."+2*".$r[2]."+1*".$r[1]."+0.5*".$r[0.5]."+0.1".$r[0.1]."+0.05*".$r[0.05]."+0.01*".$r[0.01]."<br>";
    这里它提示下标溢出,就是$r[]里面的值不能小于1,这可怎么办呢?
      

  11.   

    当然可以
    $n = 345.78;$d = split(',', '100,50,10,5,2,1,0.5,0.1,0.05,0.01');$n *= 100;
    foreach($d as $k) {
      $c = $r[$k] = floor($n/$k/100);
      $n -= $k*100*$c;
    }$ch = '';
    foreach($r as $k=>$v) {
      if($v) {
        echo "$ch$k*$v";
        $ch = '+';
      }
    }100*3+10*4+5*1+0.5*1+0.1*2+0.05*1+0.01*3