鱼C论坛

 找回密码
 立即注册
查看: 2874|回复: 2

[技术交流] 【编程之美】 中国象棋将帅问题

[复制链接]
发表于 2015-7-27 21:59:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
先给学算法的童鞋介绍一本书  《编程之美》。 很有意思!! 第一章是讲如何玩CPU,呵呵好玩把?

先来看上面的一道题:

                               
登录/注册后可看大图


注意题目要求只能使用一个变量! 好坑爹的说~~~~~~

这个问题实际上就是找两个量在3X3的矩阵上不再同一列,也就是 x%3!=y%3
看代码:
  1. void easy(){
  2.         for(int i=1;i<=9;i++)
  3.                 for(int j=1;j<=9;j++)
  4.                         if(i%3 != j%3)
  5.                                 printf("A=%d,B=%d\n",i,j);       
  6. }
复制代码


但是题目要求的是只能使用1个变量。那该怎么做呢?上面用到了两个char,两个char就是short int类型。 short int可以算是一个变量,然后用指针转换为char数组,记住不能使用使用第二个变量中转,所以要写很多转换代码。
  1. #define pChar(x)  ((char *)&x)
  2. void fun3()
  3. {
  4.         // 利用指针来操作同一个变量
  5.         short int i2;
  6.         for(*pChar(i2)=1;*pChar(i2)<=9;*pChar(i2)+=1)
  7.                 for(pChar(i2)[1]=1;pChar(i2)[1]<=9;pChar(i2)[1]++)
  8.                         if(pChar(i2)[0]%3 != pChar(i2)[1]%3)
  9.                                 printf("A=%d,B=%d\n",pChar(i2)[0],pChar(i2)[1]);
  10. }
复制代码


这个是书上的一段代码:

  1. char i=81;
  2. while(i--)
  3. {
  4.     if(i / 9 % 3 == i % 9 % 3)
  5.         continue;
  6.     printf("A = %d, B = %d/n", i / 9 + 1, i % 9 + 1);
  7. }
  8. return 0;
复制代码

i=81 实际上是把两次循环变为了一次循环,很有意思把。

这里还有一种方法,用到了结构体。
  1. struct{
  2.         unsigned char a:4;
  3.         unsigned char b:4;
  4. }i;
  5. void fun2()
  6. {
  7.         for(i.a=1;i.a<=9;i.a++)
  8.                 for(i.b=1;i.b<=9;i.b++)
  9.                         if(i.a%3!=i.b%3)
  10.                                 printf("A=%d,B=%d\n",i.a,i.b);
  11. }
复制代码


一个简单的问题就延伸出了这么多写法,你有什么更好的写法吗?

评分

参与人数 2荣誉 +13 鱼币 +13 贡献 +11 收起 理由
拈花小仙 + 5 + 5 + 3 热爱鱼C^_^
小甲鱼 + 8 + 8 + 8 热爱鱼C^_^

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-6 21:36:48 | 显示全部楼层
感谢无名侠分享,学到了~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2015-9-5 08:58:31 | 显示全部楼层

好东西 谢谢分享
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-12 05:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表