发现自己的C语言学的太烂了。看了ChinaUnix上的那个程序,半天才反应过来。
flw老大的扫雷算法很高啊!可惜以前没有玩过扫雷,看不懂。
#include
struct p_num
{
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
unsigned int d:1;
unsigned int e:1;
unsigned int f:1;
unsigned int g:1;
unsigned int h:1;
};
int main()
{
unsigned char i;
int j;
struct p_num O;
for(i=1;i<64;i++)
{
memcpy(&O,&i,1);
if( ((O.a+O.b)>=1)
&& ((O.a+O.e+O.f)==2)
&& ( ((O.b+O.c)==0)||((O.b+O.c)==2))
&& ((O.a+O.d)==1) && ((O.c+O.d)==1 )
&& ((O.d+O.e==0)|| (O.d==1) )
)
{
printf("A:%d\tB:%d\tC:%d\tD:%d\tE:%d\tF:%d\n"\
,O.a,O.b,O.c,O.d,O.e,O.f);
}
}
}
刚开始看有点不明白,后来差了一下书才明白。
struct p_num
{
unsigned int a:1;
unsigned int b:1;
unsigned int c:1;
unsigned int d:1;
unsigned int e:1;
unsigned int f:1;
unsigned int g:1;
unsigned int h:1;
};
这不是结构体而是位字段。不过用法跟结构体一样,只不过为了节省空间。
for(i=1;i<64;i++)
{
memcpy(&O,&i,1);
这一段刚开始怎么也看不明白。后来,来了一招
memcpy(&O,&i,1);
printf("%d\n",O.a);
printf("%d\n",O.b);
printf("%d\n",O.c);
printf("%d\n",O.d);
printf("%d\n",O.e);
printf("%d\n",O.f);
printf("%d\n",O.g);
printf("%d\n",O.h);
printf("\n");
printf("Press any key to continue!\n");
getchar();
啊!原来是生成1-63的二进制,高啊!实在是高!
阅读(1104) | 评论(0) | 转发(0) |