查看完整版本: 华为07年软件研发的最后一题

yangwangna 2006-11-3 10:05

华为07年软件研发的最后一题

/*
华为07年软件研发的最后一题:
羽毛球场管理程序
ps:可能错误处理还不完善
  */
#include <iostream.h>

#define MAXSUM 100
#define error -1

unsigned char court[MAXSUM] = {0};

//数组置1子程序
void SET(int first, int num)
{
        int i;

        if(num == 1)
        {
                court[first] = 0xFF;        //既是开始也是结束
                return;
        }

        court[first] = 0xF0;        //开始标志
        for(i=first+1; i<first+num-1; i++)
                court[i] = 1;
        court[first+num-1] = 0x0F;        //结束标志

}

//数组置0子程序
void CLR(int first, int last)
{
        int i;
        for(i=first; i<=last; i++)
                court[i] = 0;
}

//申请n个球场
int request(int n)
{
        int sum,i;
       
        if(n<0 || n>MAXSUM)        //非法n值
                return error;
       
        for(i=0; i<MAXSUM; i++)
        {       
                sum = 0;
                if(court[i] == 0)
                {
                        sum++;       
                        while(court[++i]==0 && sum<n && i<MAXSUM)
                                sum++;        //0值计数
                        if(sum == n)
                        {
                                SET(i-n, n);
                                return i-n;
                        }
                }       
        }
        return error;
}

//释放球场,n为您所申请到的连续球场初始编号
int free(int n)
{
        int i;
       
        if(n<0 || n>MAXSUM)        //非法n值
                return error;

        if((court[n] & 0xF0) != 0xF0)        //n为非法初始编号
                return error;

        for(i=n; i<MAXSUM; i++)
                if((court[i] & 0x0F) == 0x0F)        //找出结束编号
                        break;

        CLR(n, i);
        return true;
}

//test
int main(int argc, char* argv[])
{
        int test[6] = {2, 1, 30, 1, 20, 80};
        int        result[6];
        int i;

        //cout << request(10) <<endl;
        for(i=0; i<6; i++)
        {
                result[i] = request(test[i]);
                cout << "request:" << test[i] << "\tresult:" << result[i] <<endl;
                //free(result[i]);
        }

        for(i=0; i<6; i++)
                cout << "free succeed? " << free(result[i]) <<endl;

        cout << "free succeed? " << free(5) <<endl;
        return 0;
}
页: [1]
查看完整版本: 华为07年软件研发的最后一题