有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
函数代码如下:
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
相关文章推荐
- 有3个商人和3个随从在河岸边,他们都想过河,只有一艘船,没有船夫,而且船一次只能载2个人.任何时候船过了河,只要这6个人没过完,都得人回来接,怎么才能顺利过河呢?要求任何时候都不得随从数目大于商人数目,防止他们劫财.
- 图书馆里有没有某本书,现有6人排队,有3个人来借此书,3个人来还此书,且若到某人借书时,若无书,则立即离开,多少种排队方法能借到书?
- 4程序员小飞原计划三天完成某个任务,现在是第三天的下午,他马上就可以做完。但是在实现功能的过程中,他越来越意识到自己原来设计中的弱点,他应该采取另一个办法,才能避免后面集成阶段的额外工作。但是他如果现在就改弦更张,那势必要影响自己原来估计的准确性,并且会花费额外的时间,这样他的老板、同事也许会因此看不起他。如果他按部就班地按既定设计完成,还要花更多时间在后续集成上,但那就不是他个人的问题了,怎么办
- 没有文采”的人 怎么才能写出干货?
- 还有一种可能没有尝试, 以后不断看资料,应该不断有新的可能的情况拿来尝试...
- 电脑上没有iis组件,怎么才能安装iis?
- 恐怖的boost库,难道还有什么是没有的吗?改变了对原有跨平台支持库开发想法。假如我以后不能使用boost库那怎么办啊?!
- css中导入样式表和链接样式表有什么区别,我不是问语法,而是问内在区别,还有我怎么才能体会到他们的区别
- 很少有人会否认,德国人总的来说是勤勉而守纪律的,他们的认真彻底和干劲都达到了无情的程度,对于他们所执行的任何任务都是尽心竭力、专心致志的;他们具有一种强烈的秩序感,严格服从权威;他们经常表现出时刻准备牺牲个人的气概,身陷险境时,也表现出大无畏的精神。他们所
- scala BitSet实现算法:一千万个随机数,随机数范围在1到1亿之间,现在要求写出一种算法,将1到1亿之间没有出现的随机数求出来
- 面试问题:发一个随机红包,100块钱给10个人。每个人最多12块钱,最少6块钱。怎么分?
- 现在的形势做个人博客还有前途和意义吗? – SEO每天一贴
- 现在急用 java要怎么才能学好哦 不知道能不能学好。 大概多长时间
- 中如果没有内容,怎么该单元格的边框就没了,要怎么才能显示边框
- TFS 在安装的时候没有设置SMTP邮件服务器,现在想用,该怎么设置呢?修改WebConfig
- 10.百度最新面试题:现在有1千万个随机数,随机数的范围在1到1亿之间。现在要求写出一种算法,将1到1亿之间没有在随机数中的数求出来。
- css中导入样式表和链接样式表有什么区别,我不是问语法,而是问内在区别,还有我怎么才能体会到他们的区别
- 支付宝回调通知怎么处理才能保证结果不丢失
- WINME/WIN2000/LINUX多重启动详解(4年前写的,不知道现在还有没有用)
- 27个运动员在参加完比赛后,口渴难耐,去小店买饮料,饮料店搞促销,凭三个空瓶可以再换一瓶,他们最少买多少瓶饮料才能保证一人一瓶