图书馆里有没有某本书,现有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 == 0)
    {
        for (int i = 0; i < SUM; i++)
        {
            printf("%d * ",state[i]);
        }
        printf("\n");
        printf("\b\b\b\b   ");
    }
    //还书的人都还完了,并且还有书的时候,只能借书
    if (book_return == 0 && count>0)
    {
        state[num] = -1;
        book(book_lend - 1, book_return, num + 1, count-1);
    }
    //可借的条件是图书馆有书,可还的条件是有的人没有还  
    if (count>0&&book_return>0)
    {
        state[num] = -1;
        book(book_lend - 1, book_return, num + 1, count-1);
        state[num] = 1;
        book(book_lend, book_return - 1, num + 1, count+1);
    }
    //图书馆的书的总数为0,并且有人没还书,只能还书
    if (book_return > 0&&count==0)
    {
        state[num] = 1;
        book(book_lend, book_return - 1, num + 1, 1+count);
    }

}

int main(void)
{
    book(3,3,0,0);
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值