Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5771807
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类:

2006-07-31 20:40:48

发现自己的C语言学的太烂了。看了ChinaUnix上的那个程序,半天才反应过来。

flw老大的扫雷算法很高啊!可惜以前没有玩过扫雷,看不懂。



CODE:

#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的二进制,高啊!实在是高!

阅读(1109) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~