首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

武汉大学考研题目,15分编程题。高手来,初学者就不用看了

2012-02-23 
武汉大学考研题目,15分编程题。高手来,菜鸟就不用看了。题目大致如下,用2个整型变量存储一个教室的30盏灯的

武汉大学考研题目,15分编程题。高手来,菜鸟就不用看了。
题目大致如下,用2个整型变量存储一个教室的30盏灯的开关状态,
其中规定好了,void   reverse(Lamp   cls)是把所有灯状态取反,int   count(Lamp   cls)是返回所有亮的灯的数目。

小弟已经完成了前2问,只是后面的2个函数不知道怎么写,难道要一个一个判断??
用~也不对。报错。而且他规定不能有返回值void   reverse(Lamp   cls)  
汗~~

#include "stdio.h "
struct   light
{
  int   a;
  int   b;
};
struct   Bit
{
    unsigned   bit_0   :   1;
    unsigned   bit_1   :   1;
    unsigned   bit_2   :   1;
    unsigned   bit_3   :   1;
    unsigned   bit_4   :   1;
    unsigned   bit_5   :   1;
    unsigned   bit_6   :   1;
    unsigned   bit_7   :   1;
    unsigned   bit_8   :   1;
    unsigned   bit_9   :   1;
    unsigned   bit_10   :   1;
    unsigned   bit_11   :   1;
    unsigned   bit_12   :   1;
    unsigned   bit_13   :   1;
    unsigned   bit_14   :   1;
    unsigned   bit_15   :   1;
    unsigned   bit_16   :   1;
    unsigned   bit_17   :   1;
    unsigned   bit_18   :   1;
    unsigned   bit_19   :   1;
    unsigned   bit_20   :   1;
    unsigned   bit_21   :   1;
    unsigned   bit_22   :   1;
    unsigned   bit_23   :   1;
    unsigned   bit_24   :   1;
    unsigned   bit_25   :   1;
    unsigned   bit_26   :   1;
    unsigned   bit_27   :   1;
    unsigned   bit_28   :   1;
    unsigned   bit_29   :   1;
    unsigned   bit_30   :   1;
    unsigned   bit_31   :   1;
    unsigned   bit_32   :   1;
};  
typedef   struct   light   LIGHT;
typedef   struct   Bit     BIT;
union   classroomlight
  {
      LIGHT   a;
      BIT   b;  
  };
typedef   union   classroomlight   Lamp;

void   reverse(Lamp   cls);
/*int   count(Lamp   cls);*/

main();
{
  Lamp   cls;
  cls.b.bit_0=0;
  reverse(cls);
  printf( "%d\n ",cls.b.bit_0);
}
void   reverse(Lamp   cls)
{
   
 
}




[解决办法]
一个32位的unsigned数就成了。
typedef unsigned Lamp;
Lamp lampstate;

void reverse(Lamp cls)
{
cls~=(cls < <2)> > 2;
}

int count(Lamp cls)
{
int count=0;
while((cls &= cls-1))
count++;
return count;
}


[解决办法]
修正:
int count(Lamp cls)
{
int count=0;
cls=(cls < <2)> > 2;
while((cls &= cls-1))


count++;
return count;
}
[解决办法]
long n;
while(cin> > n)
cout < <sqrt(n) < <endl;

100%对 哈哈。。。
[解决办法]
先别结贴!

TO god_sun:
你所说的:
void reverse(Lamp cls)是把所有灯状态取反
显然不可能

是可能的,只不过要用一些栈布局的知识。

请看如下程序:

#include <cstdlib>
#include <iostream>

using namespace std;

typedef unsigned int Lamp;

void reverse(Lamp cls){
Lamp a;
Lamp *temp=&a;
Lamp L=*(temp+12), LL=~L;
memcpy((temp+12),&LL,4);
}

int main(int argc, char *argv[])
{
Lamp cls=1;
reverse( cls );
cout < <cls < <endl;
system( "PAUSE ");
return EXIT_SUCCESS;
}

我用Dev C++ 4.9.9.2运行以上程序,reverse()可以实现要求的功能!
[解决办法]
由于我手头只有Dev C++ 4.9.9.2这一工具,不肯定上面的程序在其他编译器上也能正确运行,各位兄弟帮忙测测。

热点排行