博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【编程之美】中国象棋将帅问题
阅读量:5766 次
发布时间:2019-06-18

本文共 1737 字,大约阅读时间需要 5 分钟。

问题描述:

算法:

遍历A的位置

遍历B的位置

判断A、B位置是否满足要求

如果满足则输出

数据结构:

①A和B的位置存放

思路:

将可能的位置打上记号

所以A、B的位置可以用整数类型存放。

且范围是1~9.

题目要求仅使用一个变量。

方法一:

	static void Play1()        {            //4位二进制可以表示0~15。所以可以把一个byte拆分成前后四位。            //比如 b=0010 0001 ,表示A在2(0010)位置,B在1(0001)位置。            byte b = Convert.ToByte("00010001", 2);            //(b & 1111 0000)>>4 = (b & 240)>>4 = A的位置            //b + 0001 0000 = b + 16  = A的位置++            //b & 0000 1111 = b & 15  = B的位置            //b + 0000 0001 = b + 1   = B的位置++            //(b & 1111 0000)+1       = 设置B的位置为1            Console.WriteLine("所有的可能为:");            for (; ((b & 240) >> 4) <= 9; b += 16)            {                for (b = (byte)((b & 240) + 1); (b & 15) <= 9; b += 1)                {                    //将帅不能在一条线上,所以取模之后不能相等                    if (((b & 240) >> 4) % 3 != (b & 15) % 3)                    {                        Console.WriteLine("A={0}, B={1}", (b & 240) >> 4, b & 15);                    }                }            }        }

方法二:

	static void Play2()        {            byte i = 81;            //一个数可以表示为 i = 9*A + B (0≤B≤8),这种形式            //当i = 81, i = 9*9 + 0 。A=9,B=0            //当i = 80, i = 9*8 + 8 。A=8,B=8            //当i = 79, i = 9*8 + 7 。A=8,B=7            //当i = 78, i = 9*8 + 6 。A=8,B=6            //当i = 77, i = 9*8 + 5 。A=8,B=5            //当i = 76, i = 9*8 + 4 。A=8,B=4            //.....            //当i = 1 , i = 9*0 + 1 。A=0,B=1            //所以当i从80开始到1,A从8到0,B一直在0~8之间循环            while (i-- != 0)            {                if(i/9 % 3 != i %9 %3)                {                    Console.WriteLine("A={0}, B={1}",i/9+1,i % 9+1);                }            }        }
参考资料:《编程之美》

转载于:https://www.cnblogs.com/tinyjian/p/6550702.html

你可能感兴趣的文章
机房带宽暴涨问题分析及解决方法
查看>>
XP 安装ORACLE
查看>>
八、 vSphere 6.7 U1(八):分布式交换机配置(vMotion迁移网段)
查看>>
[转载] 中华典故故事(孙刚)——19 万岁
查看>>
php5编译安装常见错误和解决办法集锦
查看>>
Unable to determine local host from URL REPOSITORY_URL=http://
查看>>
ORACLE配置,修改tnsnames.ora文件实例
查看>>
Workstation服务无法启动导致无法访问文件服务器
查看>>
ant中文教程
查看>>
Linux常用命令(一)
查看>>
【VMCloud云平台】SCAP(四)租户(一)
查看>>
基于 Android NDK 的学习之旅----- C调用Java
查看>>
Tomcat http跳转https
查看>>
一个自动布署.net网站的bat批处理实例
查看>>
我的友情链接
查看>>
Centos6.6安装选包及基础场景说明
查看>>
java基础面试题-1
查看>>
深克隆与序列化效率的比较
查看>>
lamp+nginx代理+discuz+wordpress+phpmyadmin搭建一
查看>>
Windows Phone 7 中各种Task解说(启动器与选择器)
查看>>