今个自己写的代码,打印菱形

zhangcanyu2008 2013-01-14 10:19:12
<?php
header('content-type:text/html;charset=utf-8');
/*
2013/1/14
//本人在看传智播客的视频教程,这个是韩老师布置的作业.
//学习交流QQ:1811378033
//演示地址:http://blog.zhangcanyu.com/xiti/lingxing.php
推算过程:
$cs为高度或者叫做层数,取值为3及以上的正奇数
$n取值为正整数,以此来计算宽度
$kd = $n*$cs-($n-1);宽度,此公式推导过程在下
$xh = 1+($n*2)*($ii-1);//当前层星号个数
$kg = ($kd-$xh)/2;//当前层空格数量

最宽度$kd = $n*$cs-($n-1);
下面是高度为7,不同宽度时星号的个数列表
1 1 1 1 1
3 5 7 9 11
5 9 13 17 21
7 13 19 25 31
从上知道,在高度为7时,最大宽度分别为7,13,19,25,31.从而得出宽度的公式为$n*7-($n-1),$n为正整数.进而得出不同高度下最大宽度的计算公式,$n*$cs-($n-1),$cs为高度

$i为第几层,$ii为层次变化,规律为
$i =>1,2,3,4,5 1,2,3,4,5,6,7
$ii=>1,2,3,2,1 1,2,3,4,3,2,1
//当$i的层数<=最大宽度层数时,$ii自增到最大,当$i的层数>最大宽度所在层时,$ii自减
if($i<=($cs+1)/2){
$ii=++;
}else{
$ii--;
}

每层星号个数的公式为:$xh = 1+($n*2)*($ii-1);
高度为5,宽度为5的'星号'列表
1,3,5,3,1 1,5,9,13,9,5,1
$ii => 1,2,3,2,1 1,2,3,4,3,2,1
根据$kd = $n*$cs-($n-1),得出
$n => 1 2
从上我们知道每层号为
1+0,1+2,1+4,1+2,1+0 1+0,1+4,1+9,1+12,1+8,1+4,1+0
从而得出:1+2*(1-1),1+2*(2-1),1+2*(3-1),1+2*(2-1),1+2*(1-1)
1+4*(1-1),1+4*(2-1),1+4*(3-1),1+4*(4-1),1+4*(3-1),1+4*(2-1),1+4*(1-1)
进而得出:1+(1*2)*(1-1),1+(1*2)*(2-1),1+(1*2)*(3-1),1+(1*2)*(2-1),1+(1*2)*(1-1) => 以($n*2)代(1*2),以($ii-1)代入第二个括号以出以上公式
1+(2*2)*(1-1),1+(2*2)*(2-1),1+(2*2)*(3-1),1+(2*2)4*(4-1),1+(2*2)*(3-1),1+(2*2)*(2-1),1+(2*2)*(1-1) => 以($n*2)代(1*2),以($ii-1)代入第二个括号以出以上公式
最终得出:1+($n*2)*($ii-1)

求出空格公式$kg=($kd-$xh)/2;
高度为5,宽度为5的'空格'列表
1,3,5,3,1 1,5,9,13,9,5,1
$ii => 1,2,3,2,1 1,2,3, 4,3,2,1
$n => 1 2
空格=> 2,1,0,1,2 6,4,2,0,2,4,6
得出=> (5-1)/2,(5-3)/2,(5-5)/2,(5-3)/2,(5-1)/2 (13-1)/2,(13-5)/2,(13-9)/2,(13-13)/2,(13-9)/2,(13-5)/2,(13-1)/2
得出=> (最大宽度-当前星号数量)/2
得出=> ($kd-$xh)/2
*/
$cs = isset($_POST['cs'])?(int)$_POST['cs']:5;
$n = isset($_POST['n'])?(int)$_POST['n']:1;
if(!($cs>=3 && $cs%2==1)){
$cs=5;
echo('菱形的高度必须:大于等3的奇数.将按高度为5显示!<br />');
}
if(!$n>=1){
$n=1;
echo('请输入菱形的宽度:正整数.将按宽度为1显示!<br />');
}
?>
<form action='' method='post'>
请输入菱形的高度:<input type='text' name='cs' value='<?php echo($cs); ?>'>->大于等3的奇数<br />
请输入菱形的宽度:<input type='text' name='n' value='<?php echo($n); ?>'>->正整数<br />
<input type='submit' value='提交'>
</form>
<?php
echo('<title>显示菱形</title>');
echo('请使用非IE内核浏览器!<br />');
function lingxing_sx($cs,$n){//打印出的菱形为实心的
$cs = $cs;//菱形的层数,必须是奇数,从3开始
$n = $n;//$n的取值为正整数
$kd = $n*$cs-($n-1);//菱形的宽度;$kd=$n*$cs-($n-1),这个公式,是我自己推算出来的,花了老长时间-^-.高中学的数学全忘记了,没办法.
$kd_max_cs = ($cs+1)/2;
for($i=1;$i<=$cs;$i++){//取菱形的层数,$i
//当当前层数>=最大宽度时,当前层的星号个数为1+($n*2)*($i-1);决断当前层是否已>最大宽度层的方法:$i>($cs+1)/2
if($i<=($cs+1)/2){//此条件语句取$ii的值如1,2,3,4,3,2,1; 1,2,3,2,1
@$ii++;
}else{
@$ii--;
}
$xh = 1+($n*2)*($ii-1);//当前层星号个数
$kg = ($kd-$xh)/2;//当前层空格数量
for($j=1;$j<=$kg;$j++){//打印空格
echo(' ');
}
for($k=1;$k<=$xh;$k++){//打印星号
echo('*');
}
echo('<br />');
}
}


lingxing_sx($cs,$n);
?>
...全文
258 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ci1699 2013-01-24
  • 打赏
  • 举报
回复
http://bbs.csdn.net/topics/380049809
阿年飞少 2013-01-24
  • 打赏
  • 举报
回复
这么高级? 你的浏览器支持html5+css3么? 看看平行四边形的代码: #parallelogram { width: 150px; height: 100px; -webkit-transform: skew(20deg); -moz-transform: skew(20deg); -o-transform: skew(20deg); background: red; }
www_7di_net 2013-01-15
  • 打赏
  • 举报
回复
恩,挺好的,加油吧

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧