东东的朋友(一)

题目描述

东东有n个朋友,他需要和这些朋友玩耍,但是不能同时玩耍,现在给出每个朋友空闲的天数(这些天数是连续的),问这个月有多少种安排方式可以满足所有的朋友。

输入输出格式

输入格式
第一个数 nn≤20 ),表示东东有 n 个朋友,接下来的 n 个数表示每个朋友每个月需要东东陪他们的天数d( 1≤d≤10 ),一个月按 30 天计算。同一行数字用空格隔开。
输出格式
输出能满足每一个朋友的安排方法种数,如果不能满足每一个朋友,输出“poor dongdong! You are dead”。

输入输出样例

输入

 
  1. 4
  2. 3 4 4 5

输出
24

这题一开始一点思路也没有,最后问了大佬才反应过来,具体思路如下:

  • 这道题的思路乍看可能没有思路,其实逻辑上比较简单。
  • 我们不用考虑是否要排满每天,因为题里的提议忽略了一点,没有说清楚,就是我们要陪某一个朋友,必须把它的天数陪满,所以这样导致了我们不用考虑交叉天数着陪几个朋友的情况。只用考虑陪朋友的顺序这一个问题。
  • 举个例子来说,这道题里例子输入了需要四个朋友。我们假设就为1234号朋友,我们无论陪哪一个朋友,都需要把他的天数陪满,所以我们首先要计算他们总天数是否大于30天,如果大于则直接输出那个字符串,否则,我们在剩下的四个朋友种选择,先从四个里面抽一个,先去陪她,再从剩下的三个里面抽一个再去陪这个朋友,依次下去,其实就是一个求排列的过程,也就是所谓的A几几。
  • 最后,输出结果即可(大佬给我发的)代码如下:
    a=int(input())  
    sum=0  
    jie=1  
    b=input()  
    b=b.split() #通过空格将字符串分割  
    for i in range(len(b)):  
        b[i]=int(b[i]) #将字符串元素变为整型元素  
        sum+=b[i] #计算总天数有多少  
        jie*=i+1 #计算阶乘这样的优势,是省去了一个for循环  
    if(sum>30):  
        print("poor dongdong! You are dead")  
    else:  
        print(jie)   

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值