题解 | 小红的双生排列
小红的双生排列
https://www.nowcoder.com/practice/592c127032164493b505d59540595e99?tpId=37&tags=&title=&difficulty=3&judgeStatus=0&rp=1&sourceUrl=%2Fexam%2Foj%2Fta%3FtpId%3D37
#include <iostream>
using namespace std;
/*
偶数:n/2;
奇数:n-n/2
奇数排列*偶数排列个数
如果是奇数=偶数,则先排奇数或先排偶数都可以(后面*2);
而如果奇数=偶数+1,则只能先排奇数,两奇数中间插偶数。
*/
int main() {
long long a = 0, b = 0, count = 1;
long long n;
while (cin >> n) {
b = n / 2;
a = n - b;
if (n == 2) {
cout << 2;
return 0;
}
for (int i = a; i > 0; i--) {
count *= i;
count %= (1000000000 + 7);
}
for (int j = b; j > 0; j--) {
count *= j;
count %= (1000000000 + 7);
}
if(n%2==0)count=count*2%(1000000000 + 7);
cout << count;
}
}
#转行#牛客-华为机试题解 文章被收录于专栏
刷题过程中,对部分有心得的题目的解题方式进行分享,欢迎交流!

字节跳动工作强度 1199人发布
查看16道真题和解析