游客 Signup | Login
中文 | En

2702 - 送信活动

又是一年表白日,山东建筑大学ACM协会决定为大家做点好事,于是决定在映雪长廊举办送信活动。凡是有自己喜欢的人,都可以在信上写上自己想要表达的内容,然后由我们送到他们或她们的宿舍。这天有n个人来到映雪长廊参加这个活动,因此就有n封信。现在ACM协会决定让叉叉叉去送信,送错一封很正常,可是这叉叉叉竟然将所有的信都送错了人,现在ACM协会想知道这信传错共有多少种情况。

Input

第一行输入一个T,代表有T组测试数据。接下来每行包含一个整数n(1<=n<=10),表示有n封信。

Output

输出所有信都传错的情况数。

Examples

Input

3
1
3
6

Output

0
2
265

Solution C

#include <stdio.h>
int m = 0;
int list[11] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };

int f(int n, int k)
{
	if (k == 0)
	{
		m++;
		return 0;
	}
	for (int i = n; i >= 1; i--)
	{
		if (i != k && list[i] == 0)
		{
			list[i] = 1;
			f(n, k - 1);
			list[i] = 0;
		}
	}
}

int main()
{
	int t;
	scanf("%d", &t);
	while (t--)
	{
		int n;
		scanf("%d",&n);
		f(n, n);
		printf("%d\n", m);
		m=0;
	}
	 return 0;
}

Solution C++

#include<stdio.h>
int a[57];
int main()
{
    //freopen("in.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    int n,i;
    a[0]=0;
    a[1]=0;
    a[2]=1;
    for(i=3;i<=50;i++)
    {
        a[i]=(i-1)*(a[i-1]+a[i-2]);
    }
    int t;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d",&i);
         printf("%d\n",a[i]);
    }
    return 0;
}

Time Limit 2 seconds
Memory Limit 2048 MB
Discuss Stats
上一题 下一题