题目:给n个人送n封信,算出这n封信全部送错的情况有多少种。
解题思路:先找出规律,规律即a[i]=(i-1)*(a[i-1]+a[i-2]),这种情况是当n大于等于3的时候,当n小于3的时候在定义数组的时候初始化好。
细节处理:将情况以3为界限分别考虑。
代码:#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,i;
long long int a[100]={0,0,1};
while(cin>>n)
{
if(n<3)
cout<<a[n]<<endl;
if(n>=3)
{for(i=3;i<=n;i++)
a[i]=(i-1)*(a[i-1]+a[i-2]);
cout<<a[n]<<endl;}
}
return 0;
}
感想:循环时的大括号一定要考虑好起始和结尾在哪。