编程之美 拒绝玄学 将帅问题简明解The problem of chinese chess about generals

将帅问题,解法二作者的思路很简洁,看到网上很多人都说是二重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语言实现下就好。

#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运行通过。
看了好多人的解答,自认为上述解法还是很容易理解的,希望能帮到大家。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值