飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 5086|回复: 6

[C/C++] 用简单的二元一次方程组解释菱形打印程序

[复制链接]

该用户从未签到

发表于 2009-5-17 13:17:28 | 显示全部楼层 |阅读模式
前天看这个Nisy老大打印这东西的时候写的很轻松,自己看完视频写了下发现还是自己对于菱形中, "*"这个小东西的相互位置关系还是
不能很清晰的把握。所以自己就用数学的关系来好好的解释下。自己的数学比较菜,也算是对自己思路的一种梳理。
这里首先还是定义两个变量: i,j。分别代表行号和列号;同时定义行中间的行号为F,为了适应其他的奇数,所以定义变量N
昨天论坛里的一朋友说i,j变量定义从0开始比较好计算关系。所以我们就用i=1;j=1为起始(这里起始用0也是同理可以推出)
这里我们另外设两个变量x,y,让他们帮助确定i,j之间的关系。先取N=5的情形作为实例,其他奇数可以类推。
我们先算下各个位置下的i,j的关系(依据图 1),
菱形PYG.rar (9.44 KB, 下载次数: 24)
                      菱形左边            菱形右边
第一行    i=1时,      j=3              j=3
第二行    i=2时,      j=2              j=4
第三行    i=3时,      j=1              j=5
第四行    i=4时,      j=2              j=4
第五行    i=5时,      j=3              j=3
我们注意菱形左面和右面j相加的结果为一个定值N+1.
好了,相当于我们知道了10个坐标(i,j),我们来引进我们的数学关系式来确定i与j的关系
中间行号F的值为(N/2+1)
设 j=abs(F-i+x)+y,然后把F,i和j的值带进去,得到的二元一次方程组为:
3=abs(3-1+x)+y    即 3=abs(2+x)+y
2=abs(3-2+x)+y    即 2=abs(1+x)+y
1=abs(3-3+x)+y    即 1=abs(0+x)+y
2=abs(3-4+x)+y    即 2=abs(-1+x)+y
3=abs(3-5+x)+y    即 3=abs(-2+x)+y
计算下就可以发现取 x=0,y=1可以满足上面的等式。所以
计算得出了,菱形左边的i,j之间的关系为:j=abs(F-i)+1
所以菱形右面的i,j之间的关系随之确定j=(N+1)-(abs(F-i)+1),即j=N-abs(F-i)


源程序就是下面的了
/* Note:i,j start from 1 */
#define N 13
#define F (N/2+1)
#include "math.h"
#include "stdio.h"
main()
{
    int i,j;
   
    for(i=1;i<=N;i++)
    {
       for(j=1;j<N+1;j++)
       {
               if((j==(abs(F-i)+1))||(j==(N-abs(F-i))))
                 printf("*");
               else
                 printf(" ");
                 
                 if(j==N)
                 printf("\n");
              
               }       
    }
}

[ 本帖最后由 kelvar 于 2009-5-18 13:02 编辑 ]
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2022-4-18 15:36
  • 签到天数: 207 天

    [LV.7]常住居民III

    发表于 2009-5-17 13:30:37 | 显示全部楼层
    占个沙发学习下
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-4-29 07:52
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-5-17 13:31:36 | 显示全部楼层
    提示: 作者被禁止或删除 内容自动屏蔽
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    2022-2-23 17:43
  • 签到天数: 92 天

    [LV.6]常住居民II

    发表于 2009-5-18 09:12:19 | 显示全部楼层
    这样解释一下就好弄明白了,谢谢。/:good
    PYG19周年生日快乐!
  • TA的每日心情
    擦汗
    2017-9-24 22:49
  • 签到天数: 4 天

    [LV.2]偶尔看看I

    发表于 2009-5-18 12:00:03 | 显示全部楼层
    :victory: 很好,学习一下
    PYG19周年生日快乐!
  • TA的每日心情
    奋斗
    前天 21:02
  • 签到天数: 263 天

    [LV.8]以坛为家I

    发表于 2009-5-21 14:47:16 | 显示全部楼层
    谢谢楼主了,仔细体味
    PYG19周年生日快乐!
  • TA的每日心情
    慵懒
    2019-4-26 10:19
  • 签到天数: 14 天

    [LV.3]偶尔看看II

    发表于 2009-10-11 11:29:13 | 显示全部楼层
    越是简单的东西越不简单~
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

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