1.问题描述:
假设中国象棋的棋盘上只有“将”和“帅”,这两个棋子。
根据象棋的规则,写出“将”和“帅”所有可能的合法位置。
要求只能声明一个变量。
2.建模
由棋盘上的布局可知,“将”和“帅”的运动范围在一个3×3
的格子里。
1——2——3
| | |
4——5——6
| | |
7——8——9
上面的模型模拟“将”或“帅”的所有可能位置,因为“将”和“帅”
不能同时在同一列,所以当“将”在1,4,7的位置时,“帅”在2,3,5,6,8,9位置。反之亦然。
下面用A代表“将”,用B代表“帅”来进行模拟。
public class Chess {
/**
* 第一种方法
*/
public static void solutionA(){
//包括不符合规则的情况,一共有81中情况
int iCount=81;
while(--iCount>0)
//iCount/9%3表示列
//iCount%9%3表示行
if(iCount/9%3!=iCount%9%3)
//输出符合规则的情况
System.out.println("A="+(iCount/9+1)+" B="+(iCount%9+1));
}
/**
* 第二种方法
*/
public static void solutionB(){
//定义一个类作为变量,C中可以用结构体表示
class Position{
//A的位置
public int A;
//B的位置
public int B;
}
//声明一个变量
Position p= new Position();
for(p.A=1;p.A<=9;p.A++)
for(p.B=1;p.B<=9;p.B++)
if(p.A%3!=p.B%3)
System.out.println("A="+p.A+" B="+p.B);
}
/**
* 测试
*/
public static void main(String[] args) {
//测试方法A
System.out.println("======第一种方法======");
Chess.solutionA();
//测试方法B
System.out.println("======第二种方法======");
Chess.solutionB();
}
}
这个问题及算法转自《编程之美》。
分享到:
相关推荐
在象棋游戏中,每个节点代表一个棋盘状态,而每条边则表示一次棋子的移动。由于中国象棋的每一步都有多种可能的走法,博弈树会迅速变得极其庞大。例如,如果每步有10种可能性,仅仅经过4步,博弈树的节点数量就将...
随着科技的不断进步,人工智能在各个领域的应用越来越广泛,尤其在国际象棋领域,人工智能已经达到了一个令人瞩目的高度。例如,一台计算机击败了人类国际象棋大师Viktor Prozorov的事件,充分展示了计算机智能的...
在博弈论中,纳什均衡是一个关键概念,由约翰·纳什提出,它描述了在一个非合作博弈中,每个玩家选择的最佳策略,即使其他玩家的策略固定不变。在这种均衡状态下,没有任何玩家可以通过单方面改变策略来提高自己的...
本节课程以"象棋与麦子"的故事引入,讲述了一个国王承诺按照国际象棋棋盘的格子数量给予麦粒的故事,以此引出编程解决复杂问题的概念。 在数学课中,我们常常使用描点法来画函数图像,例如y=x^2的抛物线。这个过程...
在小学六年级奥数课程中,第11课《棋盘中的数学2》是一个重要的专题,它主要涉及棋盘上的各种数学问题,旨在培养学生的逻辑思维、空间想象和问题解决能力。这一课的内容通常包括棋盘格子的排列、棋子的移动规则以及...
总之,Adversarial Search是AI领域中的一个重要研究方向,它结合了搜索算法、策略制定和评价函数,以应对具有挑战性的双人对战游戏。随着技术的进步,AI在游戏中的表现越来越接近甚至超越人类,这对于理解智能决策和...
3. 新课教学:介绍程序设计的一般流程,包括问题分析、算法设计、编码和调试运行,强调算法在编程中的核心地位。 4. 讨论环节:探讨普通人学习编程的价值,让学生理解编程不仅是技能,更是一种思维方式。 通过本...
《棋盘中的数学3》是小学六年级奥数课程中的一个重要课题,主要涉及利用棋盘图形和棋类游戏中的策略来解决数学问题。这节课的知识点丰富多样,旨在提升学生的逻辑思维、空间想象以及问题解决能力。下面我们将详细...
- **国际象棋的最后一步**:通过一个有趣的例子解释了如何在通信中安全地传递信息。 以上是对耶鲁大学1999年春季学期离散数学课程讲义内容的总结,涵盖了从基础的计数方法到高级的图论和密码学等多个领域的重要...