佳礼资讯网

 找回密码
 注册

ADVERTISEMENT

查看: 1024|回复: 19

求高手帮帮忙 php

[复制链接]
发表于 14-10-2008 07:24 PM | 显示全部楼层 |阅读模式
5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 3 3 3 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5

我要做出类似 这样的东西
谁会用 for  + array 做出呢?
我做了一个星期 还是不会
回复

使用道具 举报


ADVERTISEMENT

发表于 15-10-2008 12:43 PM | 显示全部楼层

回复 1# ~天使泪~ 的帖子

就很简单的判断,希望对你有帮助。

<?

$number = array(5, 4, 3, 2, 1);

for($row = 1; $row <= 9; $row++)
{
        for($col = 1; $col <= 9; $col++)
        {
                if($row == 1 || $row == 9 || $col == 1 || $col == 9) echo $number[0];
                elseif($row == 2 || $row == 8 || $col == 2 || $col == 8) echo $number[1];
                elseif($row == 3 || $row == 7 || $col == 3 || $col == 7) echo $number[2];
                elseif($row == 4 || $row == 6 || $col == 4 || $col == 6) echo $number[3];
                else echo $number[4];
        }
        echo "<br>";
}

?>
回复

使用道具 举报

 楼主| 发表于 16-10-2008 01:53 AM | 显示全部楼层
谢谢 如果我用form post 资料 过去 让他转变呢?
我的array 很烂

<html>
<head>
<meta http-equiv="content-type" c>
<title>No title</title>
<meta name="generator" c>
</head>
<body bgcolor="white" text="black" link="blue" vlink="purple" alink="red">
<form method="post" action="">
<p><input type="text" name="run">
<p><input type="submit" value ="submit" name="submit"></p>
</form>
<p> </p>
</body>
</html>
<?php
$run = $_REQUEST{"run"};
$table=($run*2-2);
echo "<table border=1>";
for($bta=0;$bta<=$table;$bta++){
$array[ ]= $bta;
}
for($a=0;$a<=$table;$a++){
echo "<tr>";
  for($b=0;$b<=$table;$b++){
  echo "<td>";
  if($a<=$b) {
echo $array[$b] ;
  }
  else
  {
  echo $array[$a] ;
  }
  echo "</td>";
  }
  echo "</tr>";
}
echo "</table>";
?>

过后出的东西是


012
112
222

但是我还是不会用array 来算数
请高手帮忙下。

[ 本帖最后由 ~天使泪~ 于 17-10-2008 12:32 AM 编辑 ]
回复

使用道具 举报

发表于 18-10-2008 12:17 AM | 显示全部楼层
原帖由 皇帝陛下的玉米 于 15-10-2008 12:43 PM 发表
就很简单的判断,希望对你有帮助。



这个好像没有解决问题

试下我的方法,用Javascript 写的,自己转换去 PHP
  1. <html>
  2. <body>
  3. <div id="DIVoutput">
  4. </div>
  5. </body>
  6. </html>


  7. <script language = "javascript">
  8. var base = 5;
  9. var i,j;
  10. var arr = new Array();
  11. arr[0] = 0;
  12. arr[1] = 1;
  13. arr[2] = 2;
  14. arr[3] = 3;
  15. arr[4] = 4;
  16. arr[5] = 3;
  17. arr[6] = 2;
  18. arr[7] = 1;
  19. arr[8] = 0;

  20. var output = "";

  21. for(i=0; i<9; i++)
  22. {
  23.     for(j=0; j<9; j++)
  24.     {
  25.         if(arr[i] > arr[j])
  26.             output += (base - arr[j]) + " "
  27.         else
  28.             output += (base - arr[i]) + " "
  29.     }
  30.     output += "<BR>";
  31. }
  32. document.getElementById('DIVoutput').innerHTML = output;
  33. </script>
复制代码

把以上的Code copy 去 notepad, 然后 save 成 "xxx.htm" 就可以看了结果

[ 本帖最后由 sfkwan 于 18-10-2008 12:18 AM 编辑 ]
回复

使用道具 举报

发表于 18-10-2008 12:59 AM | 显示全部楼层
原帖由 sfkwan 于 18-10-2008 12:17 AM 发表


这个好像没有解决问题

试下我的方法,用Javascript 写的,自己转换去 PHP









var base = 5;
var i,j;
var arr = new Array();
arr[0] = 0;
arr[1] = 1;
arr[2] = 2;
arr[3] = 3;
arr[ ...

除了nested for/while loop, 其实 Recursive function 也是一样可以做到
最重要的是,你要找出那个关系
同样的把以下的Code Save 成 "zzz.htm" 即可
  1. <html>
  2. <body>
  3. <div id="DIVoutput">
  4. </div>
  5. </body>
  6. </html>


  7. <script language = "javascript">
  8. var base = 5;
  9. var arr = new Array();
  10. arr[0] = 0;
  11. arr[1] = 1;
  12. arr[2] = 2;
  13. arr[3] = 3;
  14. arr[4] = 4;
  15. arr[5] = 3;
  16. arr[6] = 2;
  17. arr[7] = 1;
  18. arr[8] = 0;

  19. function gogogo(i, j)
  20. {
  21.     if(i>8)
  22.         return '';

  23.     var currentVal = getValue(i, j) + " ";

  24.     if(j<8)
  25.     {
  26.         j=j+1;
  27.         return currentVal + gogogo(i, j)
  28.     }
  29.     else
  30.     {
  31.         i = i+1;
  32.         return currentVal + '<BR>' + gogogo(i, 0)
  33.     }
  34. }

  35. function getValue(i, j)
  36. {
  37.     if(arr[i] > arr[j])
  38.         return base - arr[j];
  39.     else
  40.         return base - arr[i];
  41. }

  42. document.getElementById('DIVoutput').innerHTML = gogogo(0,0);
  43. </script>
复制代码
回复

使用道具 举报

发表于 18-10-2008 01:05 AM | 显示全部楼层
原帖由 ~天使泪~ 于 16-10-2008 01:53 AM 发表
谢谢 如果我用form post 资料 过去 让他转变呢?
我的array 很烂




No title












过后出的东西是


012112222
但是我还是不会用array 来算数
请高手帮忙下。


不好意思,不是很明白你要的是些什么
回复

使用道具 举报

Follow Us
发表于 18-10-2008 11:00 AM | 显示全部楼层
原帖由 sfkwan 于 18-10-2008 12:59 AM 发表

除了nested for/while loop, 其实 Recursive function 也是一样可以做到
最重要的是,你要找出那个关系
同样的把以下的Code Save 成 "zzz.htm" 即可









var base = 5;
var arr = new Array();
...


刚刚修改了,变成了 Dynamic
  1. <html>
  2. <body>
  3. <div id="DIVoutput">
  4. </div>
  5. <input type=text id="count" value='5' >
  6. <input type=button onclick="func_1()" value="Loop method">
  7. <input type=button onclick="func_2()" value="Recursive method">

  8. </body>
  9. </html>


  10. <script language = "javascript">
  11. var base = 1;
  12. var arr = new Array();


  13. function func_1()
  14. {
  15.     updateArray();
  16.     var output = "";

  17.     for(i=0; i<base*2-1; i++)
  18.     {
  19.         for(j=0; j<base*2-1; j++)
  20.         {
  21.             if(arr[i] > arr[j])
  22.                 output += (base - arr[j]) + " "
  23.             else
  24.                 output += (base - arr[i]) + " "
  25.         }
  26.         output += "<BR>";
  27.     }
  28.     document.getElementById('DIVoutput').innerHTML = output;
  29. }

  30. function func_2()
  31. {
  32.     updateArray();
  33.     document.getElementById('DIVoutput').innerHTML = gogogo(0,0);
  34. }


  35. function gogogo(i, j)
  36. {
  37.     if(i > base*2-2)
  38.         return '';

  39.     var currentVal = getValue(i, j) + " ";

  40.     if(j < base*2-2)
  41.     {
  42.         j=j+1;
  43.         return currentVal + gogogo(i, j)
  44.     }
  45.     else
  46.     {
  47.         i = i+1;
  48.         return currentVal + '<BR>' + gogogo(i, 0)
  49.     }
  50. }

  51. function updateArray()
  52. {
  53.     base = document.getElementById('count').value;
  54.     for(i=0; i<base; i++)
  55.     {
  56.         arr[i] = i;
  57.     }
  58.     for(i; i< base*2; i++)
  59.     {
  60.         arr[i] = ((base - i) + (base -2));
  61.     }
  62. }


  63. function getValue(i, j)
  64. {
  65.     if(arr[i] > arr[j])
  66.         return base - arr[j];
  67.     else
  68.         return base - arr[i];
  69. }

  70. </script>
复制代码
回复

使用道具 举报

 楼主| 发表于 19-10-2008 02:19 PM | 显示全部楼层
  好厉害

但是我不会js 。我自己学php 只会php罢了.

我的意思 是 用 php的功能 做出 post 过去资料 让他转
比例  :
在html form那里 我打 2  他就会出现
2 2 2
2 1 2
2 2 2
如果打5  他就会 出现

5 5 5 5 5 5 5 5 5
5 4 4 4 4 4 4 4 5
5 4 3 3 3 3 3 4 5
5 4 3 2 2 2 3 4 5
5 4 3 2 1 2 3 4 5
5 4 4 4 4 4 4 4 5
5 5 5 5 5 5 5 5 5

[ 本帖最后由 ~天使泪~ 于 19-10-2008 02:24 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

发表于 19-10-2008 03:05 PM | 显示全部楼层
判断的重点在中间的号码
只要中间的号码一直减,直到 == 1,流程开始由减变加。

当做半边来做,
2 2
2 1
2 2

之后再reverse array + merge 在一起

[ 本帖最后由 vampcheah 于 19-10-2008 03:07 PM 编辑 ]
回复

使用道具 举报

发表于 19-10-2008 04:58 PM | 显示全部楼层
原帖由 ~天使泪~ 于 19-10-2008 02:19 PM 发表
  好厉害

但是我不会js 。我自己学php 只会php罢了.

我的意思 是 用 php的功能 做出 post 过去资料 让他转
比例  :
在html form那里 我打 2  他就会出现
2 2 2
2 1 2
2 2 2
如果打5  他就会 出 ...


参考第七楼,那个就是答案
回复

使用道具 举报

 楼主| 发表于 21-10-2008 12:49 PM | 显示全部楼层
document.getElementById('DIVoutput').innerHTML = output;

    document.getElementById('DIVoutput').innerHTML = gogogo(0,0);

    base = document.getElementById('count').value;

我看不懂这3句话的意思. 能解释下吗 我不会js
回复

使用道具 举报

发表于 22-10-2008 11:57 AM | 显示全部楼层
把之前的Code忘了吧,因为随便写,所以很乱
以下是整理过,应该会比较容易明白
  1. <html>

  2. <head>
  3. <script language = "javascript">

  4.     var base = 1;
  5.     var arr = new Array();

  6.     //
  7.     function getResult()
  8.     {
  9.         // Call function
  10.         updateArray();
  11.         var output = '';

  12.         //Start generating the output
  13.         // Loop - Rows
  14.         for(i=0; i<base*2-1; i++)
  15.         {
  16.             // Loop - Columns
  17.             for(j=0; j<base*2-1; j++)
  18.             {
  19.                 // Call getValue function to get the appropriate number then append to output variable
  20.                 output += getValue(i, j) + ' ';
  21.             }
  22.             output += '<BR>';
  23.         }
  24.         // Output generated

  25.         // Assign the output value to DIV object
  26.         document.getElementById('DIVoutput').innerHTML = output;
  27.     }

  28.     // This function will generate the array according to the base number
  29.     function updateArray()
  30.     {
  31.         // Read the value in the text box
  32.         base = document.getElementById('count').value;

  33.         // Start generating the array
  34.         // Example:
  35.         // If Base number 5:
  36.         // [0][1][2][3][4][3][2][1][0]

  37.         // If Base number 6:
  38.         // [0][1][2][3][4][5][4][3][2][1][0]

  39.         for(i=0; i<base; i++)
  40.         {
  41.             arr[i] = i;
  42.         }

  43.         for(i; i< base*2; i++)
  44.         {
  45.             arr[i] = ((base - i) + (base -2));
  46.         }
  47.     }

  48.     // Core Logic
  49.     // So far I can only think of this relationship,
  50.     // I believe there should be another formula for the same
  51.     function getValue(i, j)
  52.     {
  53.         if(arr[i] > arr[j])
  54.             return base - arr[j];
  55.         else
  56.             return base - arr[i];
  57.     }
  58. </script>

  59. </head>

  60. <body>
  61. <input type=text id="count" value='5' >
  62. <input type=button onclick="getResult()" value="Get Result">




  63. <!-- result will be displayed in this div -->
  64. <div id="DIVoutput">
  65. </div>

  66. </body>
  67. </html>
复制代码
原帖由 ~天使泪~ 于 21-10-2008 12:49 PM 发表
document.getElementById('DIVoutput').innerHTML = output;

    document.getElementById('DIVoutput').innerHTML = gogogo(0,0);

    base = document.getElementById('count').value;

我看不懂这3句话的 ...


以上三行有个共同点,既是
document.getElementById(xxxxx)
基本上利用这个就可以得到该 doc 里的 object

这个题目的重点是在 getValue(i,j) 和 updateArray(),其他的都不是很重要
只要apply这个 Logic 在你的PHP 就可以了

[ 本帖最后由 sfkwan 于 22-10-2008 12:06 PM 编辑 ]
回复

使用道具 举报

发表于 22-10-2008 12:20 PM | 显示全部楼层
  1. <?php
  2. $number = 9;
  3. $arrSize = ($number * 2) - 1;
  4. $x = 0;
  5. $y = $arrSize - 1;
  6. $count=$number;

  7. for($i=0; $i<$count; $i++){
  8.         for($j=$x; $j<=$y; $j++){
  9.             $arrBoard[$x][$j] = $number;
  10.             $arrBoard[$y][$j] = $number;
  11.             $arrBoard[$j][$x] = $number;
  12.             $arrBoard[$j][$y] = $number;
  13.         }
  14.     $x++;
  15.     $y--;
  16.     $number--;
  17. }

  18. //show the number
  19. for($a=0;$a<$arrSize; $a++){
  20.     for($b=0;$b<$arrSize; $b++){
  21.         echo $arrBoard[$a][$b];
  22.     }
  23.     echo "--br--"; // 跳去新的一行
  24. }
  25. ?>
复制代码

[ 本帖最后由 ~废材~ 于 22-10-2008 12:23 PM 编辑 ]
回复

使用道具 举报

发表于 28-10-2008 08:53 AM | 显示全部楼层
原帖由 ~废材~ 于 22-10-2008 12:20 PM 发表


这位大大所提供的逻辑比较正确
所以参考这位大大的比较好,对你比较有帮助
回复

使用道具 举报

发表于 28-10-2008 08:40 PM | 显示全部楼层
原帖由 sfkwan 于 28-10-2008 08:53 AM 发表


这位大大所提供的逻辑比较正确
所以参考这位大大的比较好,对你比较有帮助


不要叫我大大,我比你年轻一岁。。。把我叫老了
我还是比较欣赏你的做法,比较有formula的做法。。我的做法比较像是在作弊
参考两者的做法都对lz会有帮助
明天有空就将你的js翻译成php
回复

使用道具 举报

发表于 28-10-2008 11:53 PM | 显示全部楼层
原帖由 ~废材~ 于 28-10-2008 08:40 PM 发表


不要叫我大大,我比你年轻一岁。。。把我叫老了
我还是比较欣赏你的做法,比较有formula的做法。。我的做法比较像是在作弊
参考两者的做法都对lz会有帮助
明天有空就将你的js翻译成php


难道你年年十七岁?因为我年年十八岁

其实,我的方法比较想作弊, 因为我是靠结果推出这个关系
而且我的最初想法是大概你那个逻辑,但就是想不出怎么写
所以就随便利用另一个方程式代替
老实说,就算再多的时间,我是肯定想不到你的那段程式
我以前是用PHP的, 但用JS的原因有二
1. 懒惰
2. 要让楼主自己写 (不然楼主永远都不会自己写)

楼主自己要加油

[ 本帖最后由 sfkwan 于 28-10-2008 11:55 PM 编辑 ]
回复

使用道具 举报


ADVERTISEMENT

 楼主| 发表于 29-10-2008 11:29 PM | 显示全部楼层
  
我自己的写法
既然不太会用array的写法

<html>
<body>
<form method="OST">
  <input type="test" Name="aaa">
  <input type="submit" Value="Send">
</form>

  <table border="1">
      <?php
      $d=$_POST["aaa"];
      $t=$d*2-1;/*table gui ge*/
      $z=$t/2;
      $y=round($z,0);
          for($a=1; $a<=$t; $a++)
            {
              echo "<tr>";
              for($b=1; $b<=$t; $b++)
                {
                  $e=$e+1;
                  if ($a==1 or $a==$t or $b==1 or $b==$t)
                    {
                      echo "<td>$d</td>";
                    }
                  elseif ($a==$y and $b==$y)
                    {
                      echo "<td>1</td>";
                    }
                  else
                    {
                      for ($c=1; $c<=$y; $c++)
                        {
                          if ($a==1+$c or $a==$t-$c or $b==1+$c or $b==$t-$c)
                            {
                              if ($c==$y)
                                {
                                  $e=1;
                                }
                              elseif ($c<$y)
                                {
                                  $e=$d-$c;
                                }
                              echo "<td>$e</td>";
                              $c=$y;
                            }
                        }
                    }
                  }
                }
          echo"</tr>";
          ?>
      </table>
    </body>
</html>
回复

使用道具 举报

 楼主| 发表于 29-10-2008 11:30 PM | 显示全部楼层
但是很长。。。
回复

使用道具 举报

发表于 1-11-2008 08:27 PM | 显示全部楼层
原帖由 sfkwan 于 28-10-2008 11:53 PM 发表


难道你年年十七岁?因为我年年十八岁

其实,我的方法比较想作弊, 因为我是靠结果推出这个关系
而且我的最初想法是大概你那个逻辑,但就是想不出怎么写
所以就随便利用另一个方程式代替
...


同样的给我多几天时间也是想不到你的办法。。至少你想到两种解决的方案


原帖由 ~天使泪~ 于 29-10-2008 11:30 PM 发表
但是很长。。。


楼主果然是有心学php的人。。
不过暂时没有时间去研究你的code。。
先说你犯的几个错误
在你开始的时候 $d=$_POST["aaa"];
这个时候$_POST["aaa"]还是没有被define的,虽然没有影响到,但是不好
解决方法:在<?php 之后一行 加上 if(isset($_POST["aaa"])){
                    然后再 ?>之前加上 }

第二个也是类似的问题
$e=$e+1;
这个时候的第二个$e同样也是还没有define的
解决方法:事先在for loop 外面define $e=0;

其他的应该都没有问题
要继续加油!!
回复

使用道具 举报

 楼主| 发表于 2-11-2008 02:26 AM | 显示全部楼层
  太感谢了

现在我想加些 javascript 来做我的program
和一些 ajax 但是这2个我不太会 上网学了 不太明白他的意思
  真希望有大大教。 我的朋友告诉我一句话凡是做出来的program 总会有人破解。 所以我想做些防范在我的program里
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

 

ADVERTISEMENT



ADVERTISEMENT



ADVERTISEMENT

ADVERTISEMENT


版权所有 © 1996-2023 Cari Internet Sdn Bhd (483575-W)|IPSERVERONE 提供云主机|广告刊登|关于我们|私隐权|免控|投诉|联络|脸书|佳礼资讯网

GMT+8, 22-12-2025 07:22 AM , Processed in 0.150462 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表