数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 40019|回复: 52

求助:棋子颜色变化 大家一定帮帮忙呀!

[复制链接]
发表于 2004-3-27 02:48:22 | 显示全部楼层 |阅读模式
任意拿出黑白两种颜色的棋子共8个,排成一个圆圈,然后在两颗颜色相同的棋子中间放一颗黑色的棋子,在颜色不同的棋子中间放一颗白色的棋子,放完了撤掉原来的棋子,再重复,问最终棋子怎么变化?
                                         拜托拜托各位高手一定帮忙!
发表于 2004-3-27 20:43:53 | 显示全部楼层
什么叫做“放完了撤掉原来的棋子”?“撤掉哪边的棋子”?
发表于 2004-3-28 00:06:52 | 显示全部楼层
最终应该为全是黑色的棋子吧
发表于 2004-3-28 01:18:01 | 显示全部楼层
具体算法:
1. 设黑色的棋子为0,白色的棋子为1;若初始为10100100,则应填充
    1 0 0 0 1 0 0 1 0 0 1 0 0 1 0 0
    其中1,3...15位为初始排序,2,4...16位为插入,去掉1,3...15位结果为
    0001010
2. (0001010)=(10100100)xor(01001001)其中(01001001)为(10100100)
    循环左移.
3.用D(i,n)表示第i位经过n次调整,有D(i,n)=D(i,n-1) xor D(i+1,n-1)
   =(D(i,n-2) xor D(i+1,n-2))(D(i+1,n-2) xor D(i+2,n-2))
   =D(i,n-2) xor 0 xor  D(i+1,n-2)    (合并二三项)
   =.......
   =0                                           (n==8)(因为有D(i,n-8)=D(i+8,n-8))
4.所以经过小于8次调整,结果应该全为黑.  


如:
(1)
01101111
10110001
11010010
01110111
10011001
10101010
11111111
00000000
(2)
11111010
00001111
00010001
00110011
01010101
11111111
00000000
00000000
00000000

可用C++穷举验证:
#include<iostream.h>
void main()
{
        short int s[8]={0,0,0,0,0,0,0,0},a=0,b=0;
        short int from=10,to=100;
        for(a=from;a<=to;a++){b=a;
        for(int k=0;k<8;k++){s[7-k]=b%2;b=int(b/2);}
        for(int j=0;j<=8;j++){
                for(int m=0;m<8;m++)cout<<s[m];
                cout<<'\t';
                myxor(s);//实现p=s; ROL p, 1; s=s xor p;  其中rol为汇编语句
                                            //表示循环左移(Rotate Left)
        }
        cout<<endl<<endl;
        for(int i=0;i<8;i++)if(s!=0)cout<<s;
       
       
        }
}

并建议用汇编实现.myxor(s);在C++中的效率很低又调用频繁.

发表于 2004-3-28 07:34:39 | 显示全部楼层
做的好
发表于 2004-4-19 23:28:44 | 显示全部楼层
feiyangdu 同志好有空 居然句个特例出来

我认为 用1,-1 :运算为 * 更好                       
                                  即使不懂 逻辑
而且 这个问题有     ’ 黑洞‘ 回循环进去      

结果呈 1 或-1 都没定         如 1,-1,-1     三元
发表于 2004-4-20 04:48:43 | 显示全部楼层
我想 可以换种考虑方法。
最后怎样的排列是会稳定的?
然后反推回去,是不是能出现所有的排列情况?
我想这样比穷举要来的好些。
发表于 2004-4-20 07:00:05 | 显示全部楼层
回第6楼的go2do

什么叫’ 黑洞‘ 回循环进去,请高手不吝赐教,举人例子好吗?
"运算为 * "  又是如何做?
能举出反例一个更好.

希望我们对原问题的认识相同, 并欢迎建议批评.

发表于 2004-4-25 02:47:36 | 显示全部楼层
看过看过!书上有原题[em01]
发表于 2004-4-25 02:48:05 | 显示全部楼层
全是黑子[em05]
您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-4-25 06:56 , Processed in 0.056705 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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