读书人

武汉大学考研题目15分编程题。高手来

发布时间: 2012-02-23 22:01:35 作者: rapoo

武汉大学考研题目,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这一工具,不肯定上面的程序在其他编译器上也能正确运行,各位兄弟帮忙测测。

读书人网 >C语言

热点推荐