编程之美之中国象棋问题

本文探讨了如何通过编程找出中国象棋残局中“将”与“帅”的所有不在线上的位置组合,利用简单的数学抽象实现了遍历与判断。

一、题目原型

       下过中国象棋的朋友都知道,双方的相隔遥远,并且它们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有二子(如图 1-3所示)为了下面叙述方便,我们约定用 A表示B表示”,那么A和B的运动将被限制在己方的3X3的格子中,A、B可以横向或者纵向移动一格,但是不能沿对角线移动。当A、B处于一条直线上时,棋局结束。换言之,A、B不能在一条直线上,请编写一个程序输出A、B的所有可能位置。

     

二、数学抽象

     这个问题的大致思路是遍历每个A、B可能出现的位置,然后组合、判断,如果条件满足就输出。基于这个思路,我们发现A、B的位置都可以用这9个数字来描述。那么怎么判断这两个点是否在一条线上呢? 仔细研究之后,我们发现可以用求余来解决,于是程序的代码就出来了:

for (int i = 1; i <= 9; i++)
            {
                for (int j = 1; j <= 9; j++)
                {
                    if (i % 3 != j % 3)
                    {
                        Console.WriteLine("A Possible Combination is" + "(" + i + "," + j + ")");
                    }
                }
            }

      呵呵,第一篇《编程之美》的文章就这样愉快的开始吧!

 

 

     

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云来雁去

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值