关于中国象棋的一道微软面试题目
来源:互联网 发布:autocut下料软件 编辑:程序博客网 时间:2024/05/17 06:15
最近看了一道微软的面试题题目是这样的:
下过中国象棋的朋友都知道,双方的“将”和“帅”相隔遥远,并且他们不能照面。在象棋残局中,许多高手能利用这一规则走出精妙的杀招。假设棋盘上只有将和帅,如下图所示
(为了描述方便,约定A表示将,B表示帅)
A和B二子被限制在己方3X3的个子里运动,例如,在如上的表格里,A被正方形{d10,f10,d8,f8 }包围,而B被正方形{d3,f3,d1,f1}包围
每一步,A,B分别可以横向或纵向移动一格,但不能沿对角线移动,另外,A不能面对B,也就是说,A和B不能处于同一纵向直线上
请些出一个程序,输出A,B所有合法位置,要求代码中只能使用一个变量。
在看参考答案之前我是这么思考的
将位置(1,4,7)(2,5,8)(3,6,9)分成三组其中第一组用三除余1,第二组余2,第三组整除(余0);
#include "stdio.h"int main(){ for(int i=1;i<10;i++) { if(i%3==1) printf("%d,(%d,%d,%d,%d,%d,%d)\n",i,i%3+1,i%3+2,i%3+4,i%3+5,i%3+7,i%3+8); if(i%3==2) printf("%d,(%d,%d,%d,%d,%d,%d)\n",i,i%3-1,i%3+1,i%3+2,i%3+4,i%3+5,i%3+7); if(i%3==0) printf("%d,(%d,%d,%d,%d,%d,%d)\n",i,i%3+1,i%3+2,i%3+4,i%3+5,i%3+7,i%3+8); }return 0;}
虽然满足了要求,但是总感觉是在按图索骥,依照答案找算法,技术含量不怎么高,且效率高低有待商榷。
《编程之美》作者给出几种答案如下
#include "stdio.h"int main(){ char i=81; while(i--) { if(i/9%3==i%9%3) continue; printf("A= %d,B=%d\n",i/9+1,i%9+1); }return 0;}
struct
{
unsigned char a:4;
unsigned char b:4;
}i;
main()
{
for(i.a=1;i.a<=9;i.a++)
for(i.b=1;i.b<=9;i.b++)
if(i.a%3!=i.b%3)
printf("A=%d,B=%d\n",i.a,i.b);
}
- 关于中国象棋的一道微软面试题目
- 分享一道微软的数据结构面试题目
- 一道微软面试时碰到的,经典的,关于字符串操作的面试题目
- 一道面试题目,关于this的理解
- 关于腾讯面试的一道题目
- 关于Notify() wait()的一道面试题目
- 关于金山的一道面试题目
- 关于金山的一道面试题目
- 华为面试的一道题目
- 一道面试的智力题目
- 一道复杂的面试题目
- Google的一道面试题目
- 迅雷的一道面试题目
- 一道华为的面试题目
- 一道js的面试题目
- 一道面试的智力题目
- 微软的一个面试题目
- 关于继承的一道题目
- 【索引】Maths - Simple Geometry
- IOCP编程小结(中)
- js 正则 电话号码
- 搭建本地maven私服
- sql语句基础
- 关于中国象棋的一道微软面试题目
- 有用的代码片段
- python中的for...else的使用方法
- STL里的multimap使用简介
- NYOJ-463-九九乘法表-2013年6月7日16:13:10
- DES加密算法Java应用实例
- 不要再逼我们去见旧情人
- bash-completion for gentoo和使sudo支持tab补齐
- 使用 runcluvfy 校验Oracle RAC安装环境