黑子的展览柜#
题目描述:#
总所周知,黑子是个热爱篮球的人。黑子小的时候喜欢打小篮球练习,长大以后就选择了大一点的标准大小的篮球。
黑子对这些陪他从小到大的篮球有特殊情感。为此,黑子决定在自己的养鸡场中建起一座展览柜台来将这些篮球摆成一排来纪念。
但黑子有个特殊的要求,他希望当他从第一个篮球开始往右数时,小篮球的个数总是不超过大篮球的个数,黑子认为这样摆放的球才有美感。
现在,黑子希望知道有多少种具有美感的排列方案。可是,黑子拥有的篮球实在太多了,于是黑子把这个难题交给了你。你需要写出一个程序来计算结果。
输入描述#
第一行输入一个整数 T,T≤20,表示测试数据的数量
紧接着 T 行,每行一个整数 n,n≤20。表示大篮球的个数和小篮球的个数都是 n。
输出描述#
输出 T 个整数,表示每个测试数据的合法的排列方案。
输入样例:#
1 5
输出样例:#
42
Source Code
Problem: 1467 User: 202205567311
Memory: 1136K Time: 0MS
Language: G++ Result: Accepted
Source Code
#include<stdio.h>
#include<string.h>
long long lanqiu[25][25];//X xiao Y da
int main() {
int k, n, i, j;
scanf("%d", &k);
while (k--) {
memset(lanqiu, 0, sizeof lanqiu);
scanf("%d", &n);
//lanqiu[0][1]=1;
for ( i = 1; i <= n; i++) {
lanqiu[i][0] = 1;
}
// for ( i = 1; i <= n; i++) {
// printf("%d", lanqiu[i][0]);
// }
for ( i = 1; i <= n; i++) {
for ( j = 1; j < i; j++) {
lanqiu[i][j] = lanqiu[i][j - 1] + lanqiu[i - 1][j];
}
lanqiu[i][i] = lanqiu[i][i-1];
}
printf("%I64d\n",lanqiu[n][n]);
// for ( i = 0; i <= 20; i++) {
// for ( j = 0; j <= 20; j++) {
// printf("%d ", lanqiu[i][j]);
// }
// printf("\n");
// }
}
}