题解:该题是可以使用卡特兰数递推来解决,因为是从1到n顺序进栈的所以,定义一数组f[999],用于记录有几个数时的出栈的结果数量,当最后一个出栈的数字是x的时候,出栈的数可以分为两部分:
一部分比x大,一部分比x小
比x大就是f[n-x],比x小就是f[x-1]
当然f[0]和f[1]都是1,从2开始递推
代码如下:
#include<stdio.h> int approach[999]; int main(void) { int n; scanf("%d", &n); approach[1] = 1; approach[0] = 1; for (int i = 2; i <= n; i++) { for (int j = 1; j <= i; j++) { approach[i] += approach[j - 1] * approach[i - j]; } } printf("%d", approach[n]); return 0; }