题目描述
东东有n
个朋友,他需要和这些朋友玩耍,但是不能同时玩耍,现在给出每个朋友空闲的天数(这些天数是连续的),问这个月有多少种安排方式可以满足所有的朋友。
输入输出格式
输入格式
第一个数 n
( n≤20
),表示东东有 n
个朋友,接下来的 n
个数表示每个朋友每个月需要东东陪他们的天数d( 1≤d≤10
),一个月按 30
天计算。同一行数字用空格隔开。
输出格式
输出能满足每一个朋友的安排方法种数,如果不能满足每一个朋友,输出“poor dongdong! You are dead”。
输入输出样例
输入
4
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)