// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动 #include <iostream> #include<algorithm> using namespace std; #define MOD 1000000007; int main() { int n; cin >> n; //当且仅当任意相邻两项之和均为奇数 //奇数 + 偶数 为奇数 ----》奇 偶 数相间排列 //n为偶数时 奇数偶数 偶数奇数都行 //n为奇数时 只能奇数偶数 因为奇数多一个 且每个整数恰好出现一次 long long ans = 1; int odds = (n + 1) / 2; // 奇数个数 int evens = n / 2; // 偶数个数 // 计算奇数排列数 for (int i = 1; i <= odds; ++i) ans = ans * i % MOD; // 计算偶数排列数 for (int i = 1; i <= evens; ++i) ans = ans * i % MOD; // 当n为偶数时两种模式都有效,需要乘2 if (n % 2 == 0) ans = ans * 2 % MOD; cout << ans; } // 64 位输出请用 printf("%lld") // // 活动地址: 牛客春招刷题训练营 - 编程打卡活动