/*****转帖请注明 原创于华南理工 吴泳添*****/
- /*****转帖请注明 原创于华南理工 吴泳添*****/
- #include <iostream>
- #include <math.h>
- using namespace std;
- //使用4个字节的32位记录停车点00000000,00000000,00000000,00000000
- unsigned int N = 0;
- int i = 0;
- int countNum = 0;
- int initParking()
- {
- N = N^ (unsigned int)pow(2,i);
- i++;
- countNum++;
- return i;
- }
- bool recoverParking(int outNum)
- {
- i = outNum-1;
- if ( (N^ (unsigned int)pow(2,i) )>N )
- {
- return 0;
- }
- N = N^ (unsigned int)pow(2,i);
- countNum--;
- return 1;
- }
- int NumOfParking()
- {
- return countNum;
- }
- void main()
- {
- cout<<"停车场管理系统!"<<endl;
- for (;;)
- {
- int order;
- cout<<"--------------------------------------------------------------------"<<endl;
- cout<<"输入命令:(“1”为停车,“2”为出车,“3”为查看车数目,“4”为退出)"<<endl;
- cin>>order;
- if (order>4||order<1)
- {
- cout<<"输入错误,重新输入:"<<endl;
- continue;
- }
- if (order == 1&&(countNum >=32 || i>=32))
- {
- i=0;
- if(countNum>=32)cout<<"车辆停放已满!!"<<endl;
- continue;
- }
- if (order == 4)
- {
- break;
- }
- if (order == 1)
- {
- up: if ((N^ ((unsigned int)pow(2 ,i)))>N)
- {
- printf("有车辆停入,停车号:%d/n",initParking());
- // cout<<N<<endl;
- continue;
- }
- else
- if(i<31)
- {
- i++;
- goto up;
- }
- else
- {
- i = 0;
- goto up;
- }
- }
- if (order == 2)
- {
- int outNum;
- cout<<"输入开出的车辆号:"<<endl;
- cin>>outNum;
- if (recoverParking(outNum)&&outNum<=32)
- {
- printf("车辆开出成功,该停车号为:%d/n",outNum);
- continue;
- }
- cout<<"无此车辆号!!请重新输入!"<<endl;
- }
- if (order == 3)
- {
- printf("已经停放车辆数:%d/n",NumOfParking());
- continue;
- }
- }
- }
- /*****转帖请注明 原创于华南理工 吴泳添*****/
代码有待改善!!!!