您的位置:首页 > 其它

有n个人到图书馆还书,还有n个人到图书馆借书,若他们要还和借的书是同一种书且图书馆内现在没有此书,求他们要怎么排队才能保证每个人都能借到书

2012-04-11 11:12 381 查看
我们可以把图书馆这本书看成一份资源 资源如果等于0 说明需要还书 如果大于等于0 既可以还书 也可以借书

函数代码如下:

void f(int returnbook, int borrowbook,int resource,string& queueresult, int& resolutionnumber)

{

if(borrowbook == 0&&resource>=0) //所有借书的人都满足了输出结果

{

cout << queueresult<<endl;

resolutionnumber++;

return;

}

if(resource==0&&returnbook>0) //图书馆已无书,则先还

{

queueresult+='1'; //"1'代表还书

f(returnbook-1,borrowbook,resource+1,queueresult,resolutionnumber);

}

else

{

if(returnbook>0) //图书馆存在书并且还有书未还,则既可借亦可还

{

queueresult+='1';

f(returnbook-1,borrowbook,resource+1,queueresult,resolutionnumber); //还书之后资源加1 而还的书的数目就减1

queueresult[queueresult.length()-1]='0';//"0'代表借书

f(returnbook,borrowbook-1,resource-1,queueresult,resolutionnumber);//借书之后资源减1 而借的书的数目就减1

}

else

{

if(resource>0) //图书馆存在书并且书全已还,则只可借

{

queueresult+='0';

f(returnbook,borrowbook-1,resource-1,queueresult,resolutionnumber); //还书之后资源加1 而还的书的数目就减1

}

}

}

if(!queueresult.empty()) //还原结果

queueresult.erase(queueresult.length()-1,1);

}

测试程序:

#include <iostream>

#include <string>

using namespace std;

void f(int returnbook, int borrowbook,int resource,string& queueresult, int& resolutionnumber);

int main()

{

string queueresult;

int resolutionnumber=0;

int returnbook,borrowbook,resource;

cin>>returnbook>>borrowbook>>resource;

f(returnbook,borrowbook,resource,queueresult,resolutionnumber);

cout << resolutionnumber <<endl;

return 0;

}

输入:

3 3 0

输出结果如下:

111000

110100

110010

101100

101010

5
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐