CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C++ 语言

发个题目大家一起讨论

楼主tangguohua1983(国华)2005-05-19 18:00:31 在 C/C++ / C++ 语言 提问

任意拿出黑白2色棋子共8个,排成一个圆圈,然后再两颗相同颜色棋子中间放一颗黑色旗子,在不同颜色棋子中间放一个白色旗子,放完后撤掉原先所放的棋子,再重复以上过程,放下一圈后,就拿走前一圈所放的棋子,这样重复下去,各棋子的颜色怎么变化 问题点数:10、回复次数:15Top

1 楼tangguohua1983(国华)回复于 2005-05-19 18:04:11 得分 0

偶是新手,想到用循环队列表示,但是每轮要删除前一轮放的,这个不知道怎么来做,请高手指教Top

2 楼healer_kx(甘草(楼主揭贴吧,我们这些上班灌水的也不容易))回复于 2005-05-19 18:07:16 得分 1

很晕啊,   是不是同事进行的啊?  
  加入有两个黑的。我再放一个黑的,是不是先不处理新的两个黑的连续啊?  
  Top

3 楼tangguohua1983(国华)回复于 2005-05-19 18:26:50 得分 0

加入有两个黑的。我再放一个黑的,是不是先不处理新的两个黑的连续啊?  
   
  对,先不处理Top

4 楼daidodo(火箭发射机)回复于 2005-05-19 19:28:08 得分 1

一般情况下,加一个子同时也可以减一个子(除了边界),用List可以实现。Top

5 楼SaiRose(Learning......)回复于 2005-05-19 19:45:08 得分 1

最后都会是黑色的棋子Top

6 楼tangguohua1983(国华)回复于 2005-05-19 20:56:46 得分 0

怎么实现呢?  
  哪位高手给说说思路Top

7 楼ltc_mouse(野地芳菲)回复于 2005-05-19 22:05:04 得分 0

验证了一下,   SaiRose(Learning......)   说的果然是对的,呵呵~  
   
  void   main()  
  {  
        _asm{  
              mov   cl,   0xFF  
        first:  
              mov   al,   cl  
              mov   ah,   cl  
        start:  
              ror   al,   1  
              xor   al,   ah  
              mov   ah,   al  
              test   al,al  
              jnz   start  
              dec   cl  
              test   cl,cl  
              jnz   first  
        }  
        system("pause");  
  }Top

8 楼yesiloveyou(下意识的弯了一下腰,TMD,踩狗屎了)回复于 2005-05-19 22:58:29 得分 1

最后全是黑棋  
  Top

9 楼anyy0929()回复于 2005-05-20 07:52:58 得分 3

随便编的,没仔细去想,能行,全黑,只用了数组~~~#include<iostream.h>  
   
  void   isert(int   array[])  
  {  
            int   temp=array[0];  
            for(int   i=0;i<7;i++)  
  {  
  if((array[i]==1&&array[i+1]==1)||(array[i]==0&&array[i+1]==0))  
  array[i]=1;  
  else  
  array[i]=0;  
  }  
                    if((array[7]==1&&temp==1)||(array[7]==0&&temp==0))  
  array[7]=1;  
  else  
  array[7]=0;  
   
   
  }  
   
  //4次时能达到全1,其他的情况没试;  
  //1表示黑色,0表示白色  
  void   main()  
  {          
  int   array[8]={0,1,1,0,1,0,0,1};  
  cout<<"输入循环的次数:";  
  int   number;  
  cin>>number;  
  for(int   n=0;n<=number;n++)  
  {  
  isert(array);  
  }  
                      for(int   j=0;j<8;j++)  
                            cout<<array[j]<<"   ";  
   
  }  
  Top

10 楼ltc_mouse(野地芳菲)回复于 2005-05-20 08:55:11 得分 0

设用0表示黑棋,1表示白棋,则可用unsigned   char   表示8个棋子的情况  
  根据题意,   (0,0)-->0,   (1,1)-->0,   (0,1)-->1,   (1,0)-->1,   因而可用   异或   实现  
  这就是我上面验证时使用的规则  
   
  mov   ah,   al  
  ror   al,   1  
  xor   al,   ah  
   
  用C写循环移位感觉不爽,干脆用ror了,^_^Top

11 楼tangguohua1983(国华)回复于 2005-05-20 20:04:54 得分 0

ltc_mouse(野地芳菲)::根据题意,   (0,0)-->0,   (1,1)-->0,   (0,1)-->1,   (1,0)-->1,   因而可用   异或   实现  
   
  二进制奇妙阿!学习了!  
  不过ltc_mouse(野地芳菲)的代码不是很懂,  
  刚刚学习c++,嵌入汇编语言还不会  
  看了一下不是很懂,能解释一下吗?  
  还有,运行时怎么看结果  
  再寄存器器里看?怎么看?  
  Top

12 楼ltc_mouse(野地芳菲)回复于 2005-05-20 20:18:20 得分 3

to     tangguohua1983(国华)   :  
  设当前方案为   a1a2a3a4a5a6a7a8   要插入新的棋子,需要查看ai   ai+1,异或之后得到新的bi  
  整体操作,就是对a1a2...a8循环移位1位,然后进行异或。如下:  
   
      a1a2a3a4a5a6a7a8  
  ^   a2a3a4a5a6a7a8a1  
  --------------------  
      b1b2b3b4b5b6b7b8  
   
  附:  
  unsigned   char   x   =   0x39;  
  unsigned   char   y;  
  while(   x   )  
  {  
      y   =   (x<<1)|(x>>7);  
      x   =   x^y;             ///一次插入操作后的值  
  }Top

13 楼tangguohua1983(国华)回复于 2005-05-21 10:13:32 得分 0

弄明白了,谢谢大家!  
  分不多,聊表谢意!Top

14 楼tangguohua1983(国华)回复于 2005-05-22 21:10:40 得分 0

怎么结贴阿  
  点饥“管理”,进来后,我给了分,但怎么确定呢,没有看见“结贴”2字啊  
  见笑Top

15 楼SaiRose(Learning......)回复于 2005-05-22 21:45:40 得分 0

ltc_mouse(野地芳菲)   :很棒的算法!!!学习  
  你的汇编不错啊Top

相关问题

  • 请大家讨论,题目如下:
  • [讨论]一道c语言的题目
  • 智力题目 欢迎大家讨论
  • 面试题目,大家讨论
  • 阿尔卡特的笔试题目,大家讨论讨论.
  • 几道笔试题目,大家讨论哈
  • 昨天的面试题目,[软件开发中最需要的什么]我被问倒了,请高手指教,大家讨论!
  • 大家一起看看,讨论讨论
  • 大家一起来讨论讨论 Come on!
  • 一起讨论一下。

关键词

  • 学习
  • 异或
  • 棋子
  • ltc
  • 野地芳菲
  • al
  • cl
  • ah
  • mouse
  • 颜色

得分解答快速导航

  • 帖主:tangguohua1983
  • healer_kx
  • daidodo
  • SaiRose
  • yesiloveyou
  • anyy0929
  • ltc_mouse

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo