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

简易图书馆借还书系统(核心部分) 【第一题】 源程序: /*假设图书馆的图书包含书名、编号和作者属性,读者包含姓名和借书证号属性,每个读者最多可借5本书。设计一个类object,从它派生出图书类Book和读者类Reader,在Reader类中有一个 rentbook()成员函数用于借阅图书。主函数进行测试。说明:这是一个简单的借阅过程。借阅时,假设要借阅的图书是存在的。提示: (1)在基类object中定义字符数组(或string... 阅读详情

          我们可以把图书馆这本书看成一份资源 资源如果等于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
         

c程序基本算法百例之八—借书方案知多少 <br />#include"stdio.h" int main() { int a,b,c,count=0; printf("借书方案为:/n"); for(a=1;a<=5;a++) for(b=1;b<=5;b++) for(c=1;a!=b&&c<=5;c++) if(c!=a&&c!=b) printf(count%5?"%2d:%d,%d,% 阅读详情

相关推荐

给定一个整数实现奇偶比特位互换

上次参加创新工场笔试,有个题目叫做定义一个宏实现,给定一个整数,进行奇偶比特位互换,比如整数6互换之后就变成9,当时毫无头绪,回头想想也不是很难 思路如下: 左移一位,则偶数位到了奇数位,将偶数位清零 右移一位,则奇数位到了偶数位,将奇数位清零   让两者相加,则得结果         32位的整数,那么如何让偶数位清零,我们知道任何比特位与1相与是其本身,与0相与变为0,因而若想将偶数

LearnITing的专栏 3950

5. 卡特兰数(Catalan)公式、证明、代码、典例.

1. 定义 卡特兰数(卡塔兰数),英文名Catalan number,是组合数学中一个常出现在各种计数问题中出现的数列。 其前几项为(从第零项开始) : C0 = 1, C1 = 1, C2 = 2, C3 = 5, C4 = 14, C5 = 42, C6 = 132, C7 = 429, ...

Chilan_Yuk的博客 6万+

保姆级教程:在阿里云ECS上用Docker一键部署EMQX MQTT服务器(Ubuntu 20.04)

本文提供在阿里云ECS上使用Docker一键部署EMQX MQTT服务器的详细教程,涵盖从实例创建、Docker环境配置到EMQX部署与优化的全流程。适合物联网开发者快速搭建高效、安全的MQTT消息服务器,适用于智能家居、工业物联网等场景。

weixin_28739079的博客 308

图书馆里有没有某本书,现有6人排队,有3个人来借此书,3个人来还此书,且若到某人借书时,若无书,则立即离开,多少种排队方法能借到书?

#include<stdio.h> #include<stdlib.h>#define SUM 6 int state[SUM]; //1代表还书 -1代表借书 // void book(int book_lend,int book_return,int num,int count) { //算法结束的条件是:借书的人都借到了,即book_lend==0 if (book_lend

凤栖梧桐 1018

Xilinx VU+系列多DIE FPGA时序约束与跨DIE信号优化策略

本文深入探讨了Xilinx VU+系列多DIE FPGA的时序约束与跨DIE信号优化策略。针对2.5D/3D封装技术带来的时序挑战,详细解析了SLR区域约束、Laguna寄存器配置及跨时钟域约束等关键技术,提供了实用的TCL脚本和RTL优化示例,帮助开发者有效提升设计性能和时序收敛效率。

weixin_29209801的博客 654

MounRiver避坑实录:手把手迁移CH32V307 EVT工程到自定义目录

本文详细记录了将沁恒CH32V307的EVT工程迁移到自定义目录的完整流程与避坑指南。针对MounRiver Studio的虚拟链接机制,重点讲解了如何清理旧配置、重新设置头文件路径、链接脚本等关键步骤,帮助开发者创建独立、可维护的MCU项目工程。

uber9的博客 244

信号量,PV操作题目。

 (一)   图书馆有100个座位,每位进入图书馆的读者要在登记表上登记,退出时要在登记表上注销。要几个程序?有多少个进程?(答:一个程序;为每个读者设一个进程) (1)       当图书馆中没有座位时,后到的读者在图书馆为等待(阻塞)(2)       当图书馆中没有座位时,后到的读者不等待,立即回家。 解(1 )设信号量:S=100;  MUTEX=1P(S)

sytstarac的专栏 7773

易智联LM401模块学习(四)——双串口收发

串口的发送和接受有三种方式,分别是阻塞发送和接收(轮询)、中断方式发送和接收、DMA方式发送和接收。这里我使用阻塞+中断的方式实现双串口通信。简单的串口收发。

weixin_46046597的博客 991

catalan数在笔试题中的应用

2012腾讯实习招聘笔试题 在图书馆一共6个人在排队,3个还《面试宝典》一书,3个在借《面试宝典》一书,图书馆此时没有了面试宝典了,求他们排队的总数? 解析:此题就是catalan数的一个典型应用,根据公式 f(n) = C(2n^n)/(n+1)。C(6^3)/4 = 5.由于人是区别的,所以还有排列组合一下3!*3!=36. 所以他们排队的总数为: 5*36 = 180. 下面是阿里巴

vividly的学习小站 1056

winedt + miktex + SumatraPDF 搭建latex环境

整个环境包含三部分: - winedt: 前端编辑器 - miktex: 后端编译器 - SumatraPDF: 预览器顺序无关紧要, 不过如果先装miktex的话, 可能会被winedt在安装的时候自动找到路径从而不需要设置.1.安装miktex首先在latex-project官网, 打开”get”后, 有四种平台: Linux, Mac OS, Windows, Online. 我写论文

Iteration makes perfection. 6462

抖音 webmssdk 签名算法解析:X-Dynosaur / X-Gnarly / X-Bogus 生成原理

它只依赖设备指纹/环境编码与随机数,与 query 内容无关,因此可以独立于 Dynosaur/Gnarly 生成。

猫敷雪 198

第二周项目4-图书馆的书

编写一个Book类,包含name(书名)、writer(著者)、public_name(出版社)、price(价格)、number(数量)、NO(书号)等数据成员。定义成员函数setBook,用来为书籍的数据成员赋值,定义成员函数borrow和restore,分别办理借出和还回(借、还书时,暂时只完成数量的增1减1,这里的书仍是一种书的概念,随着课程进展,我们继续做真正的图书管理系统,每本...

weixin_34149796的博客 302

开篇词:学习系统分析师的好处?核心考点有哪些?

系统分析师备考指南 系统分析师是IT行业的高级专业人才,具备系统分析与设计能力,能指导开发团队工作。学习系统分析师不仅能获得职业晋升的"黄金跳板",还能全面提升技术架构思维和业务理解能力。 核心价值: 职业发展:晋升管理岗位的硬性要求,突破职业天花板 能力提升:构建T型知识结构,培养架构思维和软技能 市场竞争力:成为"业务+技术"桥梁,获得国家级专业认证 考试内容: 计算机基础知识(硬件、操作系统、网络等) 系统分析专业知识(软件工程、架构设计等) 进阶知识(企业信息

数据知道的博客 5941

1.2 借书方案知多少

1.问题描述: 小明有5本新书,要借给A,B,C这三位小朋友,若每次每人只能借一本,则可以有多少种不同的借法? 2. 问题分析: 本题属于数学当中常见的排列组合问题,即从5个数中取出3个不同的数排列组合的总数。 我们可以将5本书进行1~5的编号,A,B,C。 3个人每次都可以从5本书中任选一本书,即每人都有5种选择,由于一本书不可能同时借给一个以上的人,因此三个人的书籍编号不一样。 3.代码如下 int main() { int a, b, c,i=0; for (a = 1; a &lt

WJT0129的博客 766

RT-DETR 跨模态检测改进:融合红外数据提升 R50 夜间检测效果

本文提出跨模态自适应融合RT-DETR(CMF-RTDETR-R50),通过双分支骨干网络、可变形模态对齐和门控注意力融合三大模块,将红外数据融入RT-DETR-R50检测器,显著提升夜间目标检测性能。该方法在夜间场景下mAP@0.5提升11.7%,小目标检测AP_S提升15.3%,同时保持实时性(38 FPS)。关键技术包括:1)独立提取可见光与红外特征;2)可变形卷积解决模态对齐问题;3)动态门控机制自适应融合双模态特征。该方案适用于安防监控、自动驾驶等夜间检测场景,为跨模态实时检测提供实用解决方案。

走向CTO的路上... 1447

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

图书馆借书程序我的分析

我发现很多人喜欢用这个来阐述自己的面向对象观点。所以我也来模仿一下。 我想写程序首先要熟悉业务。 首先分析一下业务流程中有多少个对象,先不关心这些对象是否真的有必要存在,简单罗列出来,方便我们总结业务流程。 首先是图书馆,放书的地方。 然后图书管理员,图书馆的老大。假设有两个服务窗口,那么就要考虑多个对象之间是怎么协调的。 或者还有保安之类的,不过应该和管理程序没有太大关系,可以忽略。 ...

weixin_34122548的博客 338

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

用C语言写的一个顺序表实现图书馆书籍管理

Function: 增add_book() 删delete_book() 改modify_book() 查check_book() 实现吧! **************************/ #include&lt;stdio.h&gt;//里面包括标准的输入输出,以及perror(“fail to open”)这样的用法 #include&lt;string.h&gt; #de...

Ayeris7的博客 5570

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

一个简单的Linux多线程例子 带你洞悉互斥量 信号量 条件变量编程

希望此文能给初学多线程编程的朋友带来帮助,也希望牛人多多指出错误。 另外感谢以下链接的作者给予,给我的学习带来了很大帮助 http://blog.youkuaiyun.com/locape/article/details/6040383 http://www.cnblogs.com/liuweijian/archive/2009/12/30/1635888...

weixin_33910460的博客 286

C语言大作业图书管理系统

#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;string.h&gt; #define N 100 typedef struct Books { char num[20]; char name[20]; char author[20]; int price; int tota...

爱写Bug 3万+

最大子数组乘积

给定一个n个元素的数组,数组元素全部为整数,负数,正数和0均有可能存在,设设计一个算法,找出连续的几个数组元素相乘积最大 刚开始时毫无头绪的,以为直接用递归就可以了,不过,当你毫无头绪的时候,你就考虑最简单的情况,然后进行分类讨论,一般是很有效果的 首先当无0的情况的时候,并且为负数位偶数个的情况的时候 不用说 全部乘起来一定是最大的乘积(无0负数位偶数个) 其次当无0负数为奇数个的

LearnITing的专栏 2832

单链表的环的入口点一个小证明

如何判断一个单向链表是否有环?如果有,如何找到其入口节点的指针?          算法思想:用两个指针p1,p2同时指向链表的头部,p1一次移动一步,p2一次移动两步,如果最终p1和p2重合则说明链表有环,如果p2走到空指针(链表的结尾)则说明链表无环; 如果最终p1和p2重合,使p2重新指向链表的头结点,然后p1和p2同时一次移动一步,当p1和p2再次重合时该节点指针就是环的入口节点指针

LearnITing的专栏 2500

求N!的二进制表示中最低位1的位置解答题中一个小证明

问题2的解法2中说到(如果不清楚题目的,可以网上搜一下 编程之美,不要被阶乘吓到)                       N!中含有质因子2个个数等于N减去N的二进制表示中1的数目,                      我真是百思不得其解,网上查了一些资料,好像也没有给出证明,有个哥们有证明,不过写的不够清楚,居然还是写在一张纸上的,然后拍完了传上去的,看得我真是

LearnITing的专栏 1520

从瀑布到流水线:DevOps 入门与 GitLab + Jenkins + Docker 落地实践

先看清软件开发生命周期(SDLC)的全貌,再对比瀑布模型与敏捷开发,随后进入持续集成与 CI/CD 的机制内核;最后落到实操——在 GitLab、Jenkins、Docker 组成的四机实验环境里,走完源码托管、自动化构建、镜像封装与远程部署,直到参数化构建与版本回滚。概念与命令并重,既是入门地图,也是操作手册。

年轻的时候很穷,经过我多年的努力,终于不再年轻。 280
上一篇: 单链表的环的入口点一个小证明
下一篇: 运算符优先级口诀表
LearnITing
博客等级 码龄15年 14粉丝 17原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值