编程之美_1.2中国象棋将帅问题

解法一:

#include <stdio.h>
#define HALF_BITS_LENGTH 4//记忆存储单元的一半,此处为4bit
#define FULLMASK 255//表示二进制的11111111
#define LMASK (FULLMASK<<HALF_BITS_LENGTH)//表示11110000
#define RMASK (FULLMASK>>HALF_BITS_LENGTH)//表示00001111
#define RSET(b,n) (b=(LMASK&b)|n)//将b的右边设置为n
#define LSET(b,n) (b=((RMASK&b)|(n<<HALF_BITS_LENGTH)))//将b的左边设置为n
#define RGET(b) (RMASK&b)//得到b的右边的值
#define LGET(b) ((LMASK&b)>>HALF_BITS_LENGTH)//得到b的左边的值
#define GRIDW 3//移动范围的行宽度
int main()
{
	unsigned char b;
	for (LSET(b, 1); LGET(b) <= GRIDW*GRIDW; LSET(b, LGET(b) + 1))
	{
		for (RSET(b, 1); RGET(b) <= GRIDW*GRIDW; RSET(b, RGET(b) + 1))
		{
			if (LGET(b) % GRIDW != RGET(b) % GRIDW)
				printf("A=%d,B=%d\n", LGET(b), RGET(b));
		}
	}
	system("pause");
	return 0;
}


解法二:

#include <stdio.h>

int main()
{
	unsigned char i = 81;
	while (i--)
	{
		if (i / 9 % 3 == i % 9 % 3)//i/9表示外循环,i%9表示内循环
			continue;
		printf("A=%d,B=%d\n", i / 9 + 1, i % 9 + 1);
	}
	system("pause");
	return 0;
}

解法三:

#include <stdio.h>

int main()
{
	struct
	{
		unsigned char a : 4;
		unsigned char b : 4;
	}i;
	for (i.a = 1; i.a <= 9; i.a++)
	{
		for (i.b = 1; i.b <= 9; i.b++)
		{
			if (i.a % 3 != i.b % 3)
				printf("A=%d,B=%d\n", i.a, i.b);
		}
	}
	system("pause");
	return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值