编程之美_象棋
来源:互联网 发布:淘宝手抄报 编辑:程序博客网 时间:2024/05/06 11:35
最近在看编程之美,颇有感触。
我把在第二章的一些想法思路写下来。
非常感谢刘未鹏,看了他的博客也让我坚定了写一些东西的决心,经过自己思考的东西都有价值,至少对自己哟价值,写的东西可能上不了台面,事实上不管你有多厉害,总会有比你更厉害的人。敢写出来也比不敢写出来好。
题目是这样的,只使用一个变量把两边的“帅”,”将”的所有可能的位置输出。
都知道帅将不能在一条直线上,也就是不能面对面,把位置编号 1 2 3.。。。。9,共9个位置,再来分析,位置之间的关联性
如果A在1那么B不能在 1 4 7 这三个位置。其他的同理。
数字之间的关系就是
用Wa表示A的位置,Wb表示B的位置
有Wa%3 == Wb%3
这里就是第一种方法,我称之为逆向思维,找出不可能的位置,书上的3中方法中都是逆向思维。
还有第二种方法自然就是正向思维了
直接找出可能存在的位置
不过在本题中不好实现。
再说说解题思路
使用一个变量,但需要表示两方的位置
首先想到的自然是一个变量当连个变量用,前后四个字节分开,注意是unsigned,否则第一个为符号位
书上的第一种方法和第三中方法都是这样的
特别说一下第三中方法
结构体里面的
unsigned char a:4;
unsigned char b:4;
表示位域,即a占4位,b占4位,
有了两个变量后自然就没什么问题了。
至于第二种方法的确相当精妙,直接使用一个变量放大9倍,也就有了两个变量的效果。
我自己也写了一个,其实差不多,都是当成两个变量用
#include<stdio.h>
int main()
{
unsigned char i=17;
for(;(i&0xf)<=9;i++)
for(i=(i&0x0f)|0x10;(i>>4)<=9;i+=16)
if ((i & 0xf) % 3 != (i>> 4) % 3)
{
printf("A=%d,B=%d\n",(i & 0x0f), (i >> 4));
}
return 0;
}
- 编程之美_象棋
- 编程之美读书笔记之象棋游戏
- 编程之美之象棋将帅问题
- 编程之美 1.2 象棋将帅问题
- 《编程之美》1.2象棋问题
- 重新开始战斗01-编程之美-象棋问题
- 编程之美——象棋将帅问题
- 编程之美_集合
- 程序之美 1.2 象棋问题
- 编程之美读书笔记_杂项
- 编程之美_买书问题
- 编程之美_神奇的数列
- 中大16_编程之美
- 读《编程之美》_面试杂谈_代码总结
- 每日算法_编程之美_重建二叉树
- 《编程之美》_游戏之乐_1
- 编程之美_数字之魅_1
- 编程之美读书笔记_4.1_金刚坐飞机问题
- UIActivityIndicatorView的简单使用
- DB2 ODBC CLI driver Download and Installation information
- Lucene入门教程
- rtmutex 的死锁检测
- 员工与领导(48)
- 编程之美_象棋
- 写好Java代码的30条经验总结
- 9个常用iptables配置实例
- 字符串为单双精度判断条件
- spring mvc controller和jsp之间传值
- 云主机环境搭建教程之搭建全能主机
- php 绘制文字、预览文字
- Spring整合Rabbitmq
- 单链表建立、倒置的思考