首页 > 试题广场 >

小红的双生排列

[编程题]小红的双生排列
  • 热度指数:3655 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
\hspace{15pt}小红定义一个排列是双生排列,当且仅当任意相邻两项之和均为奇数。
\hspace{15pt}现在小红想知道,长度为 n 的双生排列共有多少种?由于答案可能过大,请对 10^9+7 取模。

\hspace{15pt}长度为 n排列是由 1 \sim nn 个整数、按任意顺序组成的数组,其中每个整数恰好出现一次。例如,\{2,3,1,5,4\} 是一个长度为 5 的排列,而 \{1,2,2\}\{1,3,4\} 都不是排列,因为前者存在重复元素,后者包含了超出范围的数。

输入描述:
\hspace{15pt}输入一个整数 n \left(2 \leqq n \leqq 10^5\right) 代表排列的长度。


输出描述:
\hspace{15pt}输出一个整数,代表长度为 n 的双生排列数量对 10^9+7 取模的答案。
示例1

输入

3

输出

2

说明

\hspace{15pt}在这个样例中,长度为 3 的排列有:
\hspace{23pt}\bullet\, \{1,2,3\} 且为双生排列;
\hspace{23pt}\bullet\, \{1,3,2\}
\hspace{23pt}\bullet\, \{2,1,3\}
\hspace{23pt}\bullet\, \{2,3,1\}
\hspace{23pt}\bullet\, \{3,1,2\}
\hspace{23pt}\bullet\, \{3,2,1\} 且为双生排列。
头像 番禺小韭菜
发表于 2025-03-05 17:25:40
#include <iostream> using namespace std; #define MOD 1000000007; int main() { int n; cin >> n; //当且仅当任意相邻两项之和均为奇数 //奇数 + 偶 展开全文
头像 一个毕业生a
发表于 2025-04-14 22:07:47
import math n = int(input()) #计算奇偶数的数量 if n%2 == 0: qishu_c = n//2 oushu_c = n//2 else: qishu_c = n//2 + 1 oushu_c = n//2 #这里答案应该是n为 展开全文
头像 ading007
发表于 2025-05-17 14:46:34
package main import ( "fmt" ) func main() { var n int64 fmt.Scan(&n) mod := 1e9 + 7 var l int64 v1 := fact 展开全文
头像 扎男_
发表于 2025-04-17 16:56:14
// // 活动地址: 牛客春招刷题训练营 - 编程打卡活动 #include <iostream> #include<algorithm> using namespace std; #define MOD 1000000007; int main() { int n 展开全文
头像 lhp_zml
发表于 2025-03-09 11:49:11
#include<bits/stdc++.h> using namespace std; int n; const long long mod=1e9+7; int main(){ cin>>n; long long ou,ji,ans=1; if(n 展开全文
头像 XiaoXiauwu
发表于 2025-04-17 19:18:55
水题,注意到题目说的条件:相邻两数之和为奇数,那么最终构造的双生数组应该是,“奇偶奇偶...”交错排列的。因此我们直接分奇偶讨论即可。当 n 为奇数时,奇数数量比偶数数量多1,因此奇数只能放在奇数位置,偶数只能放到偶数位置,答案为 (n / 2)! * ((n + 1) / 2)!当 n 为偶数时, 展开全文
头像 安哥拉兔刷牛客
发表于 2025-04-09 22:18:33
import math #奇偶数x,y个,分别有x,y个位置可以放置, 计算A(x,x)*A(y,y)。如果长度是偶数,再乘以2, 因为从奇数或偶数开始都可以。 n = int(input()) MOD = 10**9+7 if n%2 == 1: odd = n//2 + 1 ev 展开全文
头像 TQ988
发表于 2025-07-08 17:46:01
import java.util.Scanner; public class Main { /* 答案就是:奇数元素的全排列数*偶数元素的全排列数, 如果n是偶数还有乘2,因为排列第一个可以是奇数或偶数 如果 展开全文
头像 one_peace_Bo
发表于 2025-07-28 21:13:49
#include <iostream> using namespace std; /* 偶数:n/2; 奇数:n-n/2 奇数排列*偶数排列个数 如果是奇数=偶数,则先排奇数或先排偶数都可以(后面*2); 而如果奇数=偶数+1,则只能先排奇数,两奇数中间插偶数。 */ int main( 展开全文
头像 牛客754921490号
发表于 2025-12-21 14:23:09
#include <iostream> using namespace std; // 奇+偶=奇 // 奇数排列组合数*偶数排列组合数即为答案 // n为奇数,则只有奇开头 // n为偶数,则可以偶数开头也可以奇数开头,结果*2 int main() { int n; 展开全文