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; }