|
发表于 2004-7-31 01:47:05
|
显示全部楼层
<>佩服<FONT color=#990000><B>feiyangdn</B></FONT> 版主 ,一眼就能看出这个问题的数学本质。版主的算法我不是很懂。我编了一个程序用穷举法来验证了一下,果然所有的排列都变成了全黑。
</P>
<>//本程序是C++程序,在任何C编译器里不能编译通过。
//用C++编译器编译时,文件名后缀必须是 .cpp 才能正确编译。
#include <stdio.h></P>
<>void oper(char s[8], char d[8])
{
s[8]=s[0];
for(int i=0; i<8;i++)
d=(s==s[i+1]);
}</P>
<P>void p(char o[8],int cc)
{
printf ("%2d:",cc);
for(int i=0; i<cc;i++)printf(" ");
for(i=0; i<8;i++) printf(" %d",o); printf("\n");
}</P>
<P>bool e(char e1[8], char e2[8])
{
for(int i=0;i<8;i++)if( e1!=e2) return false;
return true;
}</P>
<P>void validate(char o[8])
{
char buf[2][10];
char *a=buf[0], *b = buf[1], *c;
int count=0;
for(int i=0;i<8;i++){ a=o;b=!a;}
while(!e(a,b))
{
printf("-----------------------------------(1 代表黑,0 代表白)\n");
p(a,count++);
oper(a,b);
c=a;a=b;b=c;
}
}</P>
<P>void validate(int v)
{
if (v>255) return;
char c[8];
for(int i=0;i<8;i++) c[7-i]=(((1<<i) & v) != 0 );
validate(c);
}</P>
<P>int main(int argc, char* argv[])
{
printf("Hello World!\n");</P>
<P>for(int i=0; i<256;i++)
{
printf("验证 %3d \n",i);
validate(i);
printf("回车键继续...\n",i);scanf("%*c");
}
return 0;
}</P> |
|