将帅问题,解法二作者的思路很简洁,看到网上很多人都说是二重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运行通过。
看了好多人的解答,自认为上述解法还是很容易理解的,希望能帮到大家。