编程之美 拒绝玄学 将帅问题简明解The problem of chinese chess about generals
2016-06-30 16:28
211 查看
将帅问题,解法二作者的思路很简洁,看到网上很多人都说是二重for循环,对我这种小白,还确实一下子不好理解。个人认为作者是将代码进行过优化的,如果不讲解,是很难理解的,反正我是推倒了一下午也没有搞明白某些细节(智商碾压呀),但是思路还是很明白
但是有时候还是要返璞归真,拿起笔,认真推导一下,说不定真的只是几分钟的事。
仿照进制计算,让Y为高位,X为低位,看过编程之美的同学应该懂我的意思 st i=1:81
i=9(y-1)+x
x不等于9时 i/9=y-1 ; x=9时 i/9=y;
可见x对于表达式有影响
对此
我们解出
y=(i/9+((i%9)&&1)带入i=9(y-1)+x
x=i+9-9*(i/9+((i%9)&&1)
至此,便可以保证我们的算法正确性,下面,只需要画上一分钟把我们的想法用c语言实现下就好。
gcc运行通过。
看了好多人的解答,自认为上述解法还是很容易理解的,希望能帮到大家。
但是有时候还是要返璞归真,拿起笔,认真推导一下,说不定真的只是几分钟的事。
仿照进制计算,让Y为高位,X为低位,看过编程之美的同学应该懂我的意思 st i=1:81
i=9(y-1)+x
x不等于9时 i/9=y-1 ; x=9时 i/9=y;
可见x对于表达式有影响
对此
我们解出
y=(i/9+((i%9)&&1)带入i=9(y-1)+x
x=i+9-9*(i/9+((i%9)&&1)
至此,便可以保证我们的算法正确性,下面,只需要画上一分钟把我们的想法用c语言实现下就好。
#include<stdio.h> int main() { int i=1; while(i<82) { if((i/9+((i%9)&&1))%3 == i%9%3) {i=i+1; continue;} printf("%d",i); printf("A=%d,B=%d\n",i+9-(i/9+((i%9)&&1))*9,(i/9+((i%9)&&1))); i=i+1; } return 0; }
gcc运行通过。
看了好多人的解答,自认为上述解法还是很容易理解的,希望能帮到大家。
相关文章推荐
- MySQL 优化
- Google排名优化的几个影响因素
- DB2优化(简易版)
- Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架
- C#中尾递归的使用、优化及编译器优化
- 对优化Ruby on Rails性能的一些办法的探究
- 优化Ruby脚本效率实例分享
- Asp编码优化技巧
- 如何监测和优化OLAP数据库
- mysql -参数thread_cache_size优化方法 小结
- 深入学习SQL Server聚合函数算法优化技巧
- MySQL常见的底层优化操作教程及相关建议
- 详解mysql的limit经典用法及优化实例
- 数据库学习建议之提高数据库速度的十条建议
- oracle数据库sql的优化总结
- SQL语句性能优化(续)
- SQL语句优化提高数据库性能
- SQL优化经验总结
- SQL优化技巧指南
- SQL Server优化50法汇总