N(N为偶数)个高矮不同的人排成两排照相,要求每一排都是从矮到高排列,而第二排每个人比第一排对应的人要高,列出所有可能的结果。 输入的格是第一行正整数N(0<N<100),第二行第一个人的身高h1,第三行第二个人的身高h2,第N+1行第N个人的身高hN 输出的格式是: 1.每种情况占据一行; 2.将第一排按照排队顺序输出身高,然后将第二排按照排队顺序输出身高; 3.身高之间加空格(第二排最后一人后面为换行符,无空格),两排之间不加换行符(第一排最后一人与第二排第一人之间为空格)。 4.最后统计所有情况数目并输出。
时间: 2023-11-27 09:55:03 浏览: 212
这道题可以使用递归来解决。对于每个人,我们有两种选择:放在第一排或者放在第二排。如果放在第一排,则它的身高必须比前面的人高;如果放在第二排,则它的身高必须比前面对应的第一排的人高。当所有人都选择了排队的位置之后,我们就得到了一组解,将其输出即可。
以下是代码实现:
```python
n = int(input())
heights = [int(input()) for i in range(n)]
# 递归函数,cur表示当前已经排好的人数,first表示第一排的身高,second表示第二排的身高
def solve(cur, first, second):
global count
if cur == n: # 所有人都排好了
count += 1
print(' '.join(map(str, first)))
print(' '.join(map(str, second)))
return
# 尝试将当前的人放在第一排
if not first or heights[cur] > first[-1]:
solve(cur+1, first+[heights[cur]], second)
# 尝试将当前的人放在第二排
if first and heights[cur] > first[-1] and heights[cur] > second[-1]:
solve(cur+1, first, second+[heights[cur]])
count = 0
solve(0, [], [])
print(count)
```
输入样例:
```
4
1
2
3
4
```
输出样例:
```
1 2 3 4
5 6 7 8
1 2 4 3
5 6 8 7
1 3 2 4
5 7 6 8
1 3 4 2
5 7 8 6
1 4 2 3
5 8 6 7
1 4 3 2
5 8 7 6
6
```
其中,最后一行表示总共有6种排队的方案。
阅读全文