这个题是个数学题啊。
总体思路不是很难,每个兔子有一个编号,只要不停的看下一个兔子有多少可选编号,再乘上之前的所有可能性就可以算出一共的编号方法。
#include<iostream> #include<cstdio> #include<algorithm> using namespace std; long long n,a[100],shu=1; int main() { cin>>n; for(int i=0;i<n;i++) { cin>>a[i]; } sort(a,a+n);//把兔子的编号范围从大到小排序,这样前面的兔子可选编号一定再后面的兔子可选编号之内。 for(int i=0;i<n;i++) { shu*=a[i]-i;//第i只兔子前面已经有i-1个编号被占用了,由于我从零开始,不用再给i-1。 shu%=1000000007;//取模 } cout<<shu<<endl; return 0; }
总结:这个题应该算个数论模拟,不要想的太复杂。