有n个人到图书馆还书,还有n个人到图书馆借书,若他们要还和借的书是同一种书且图书馆内现在没有此书,求他们要怎么排队才能保证每个人都能借到书
来源:互联网 发布:python命令行参数 编辑:程序博客网 时间:2024/05/04 23:25
我们可以把图书馆这本书看成一份资源 资源如果等于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
输出结果如下:
110100
110010
101100
101010
5
- 有n个人到图书馆还书,还有n个人到图书馆借书,若他们要还和借的书是同一种书且图书馆内现在没有此书,求他们要怎么排队才能保证每个人都能借到书
- 图书馆里有没有某本书,现有6人排队,有3个人来借此书,3个人来还此书,且若到某人借书时,若无书,则立即离开,多少种排队方法能借到书?
- 有5个人ABCDE排队,排好后他们决定重新排队,每个人都不在原来的位置上,那么总共有多少种排法
- 图书馆的书
- 图书馆的书
- 图书馆的书
- 前天去图书馆借书 图书馆在开招聘会
- 【小米校招笔试】假如已知有n个人和m对好友关系(存于数字r)。如果两个人是直接或间接的好友(好友的好友的好友...),则认为他们属于同一个朋友圈,请写程序求出这n个人里一共有多少个朋友圈。
- 输入M和N的值求他们的阶乘
- 给定2个数字,n,m,使得从1到n之间的数字组合,他们的和等于m,求所有组合
- F0=0,F1=1,Fn=F(n-1)+F(n-2)(n>=2,n∈N*),相信大家还记得,现在是已知F0=a,F1=b和fn的值,求:
- 有3个商人和3个随从在河岸边,他们都想过河,只有一艘船,没有船夫,而且船一次只能载2个人.任何时候船过了河,只要这6个人没过完,都得人回来接,怎么才能顺利过河呢?要求任何时候都不得随从数目大于商人数目,防止他们劫财.
- n个人有n个帽子,每个人都不带自己帽子的可能性
- 有n(0<n<=50,且n为整数)个人围成一圈,顺序排号(1,2,…,n)。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。
- 到图书馆
- 项目二--图书馆的书
- 项目4-图书馆的书
- 第二周-图书馆的书
- 字符串数组初始化0 与memset 0 效率的分析
- Response.Redirect 打开新窗口的两种方法
- Linux-USB学习 -- 基本知识(一)
- js鼠标事件
- 移动支付创业公司ROAM Data推出首个复合型读卡器
- 有n个人到图书馆还书,还有n个人到图书馆借书,若他们要还和借的书是同一种书且图书馆内现在没有此书,求他们要怎么排队才能保证每个人都能借到书
- C++“读取位置 0x****** 时发生访问冲突”的可能原因
- 树状数组专辑
- tar文件备份
- 字符设备 register_chrdev_region()、alloc_chrdev_region() 和 register_chrdev()。
- 程序员的奋斗史(一)——浅谈几种主要编程语言
- 代码设置EditText 长度
- FTP, SFTP, FTPS examples In Java
- 对Ext—Gwt学习有用的博文网址