在一行上输入一个整数
,表示需要构造的排列长度。
如果不存在满足条件的排列,在一行上输出
;否则,在一行上输出
个整数
表示一个符合要求的排列。当存在多种可行方案时,输出任意一种均可。
1
-1
长度为1的排列只有[1],由于1+1=2是质数,不合法。所以不存在可以构造的排列。10
9 4 6 2 1 8 3 10 7 5
对于输出的排列:
;
;
;
;
全部
均不是质数,满足题意。
偶数在偶数位置上,奇数在奇数位置上。
#include <iostream>
#include <vector>
#include <climits>
#include <utility>
#include <cmath>
using namespace std;
int main() {
int n;
cin>>n;
if (n < 3) {
std::cout<<-1<<std::endl;
}
else {
vector<int> v(n, 0);
int oddIdx = 0, evenIdx = 1;
while (n) {
if (n%2 != 0) {
v[oddIdx] = n;
oddIdx += 2;
}
else {
v[evenIdx] = n;
evenIdx += 2;
}
--n;
}
for(auto&e: v) std::cout<<e<<" ";
std::cout<<std::endl;
}
return 0;
}
# a1+1=2外,其他数字自身相加(奇+奇,偶+偶)均为偶数➡合数,因此只需处理a1 length = int(input()) if length <= 2: print(-1) else: nlist = [] for i in range(1,length+1): nlist.append(i) # 交换a1,a3位置 nlist[0],nlist[2] = nlist[2],nlist[0] for i in nlist: print(i, end=' ')
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
if(n<3){
System.out.println(-1);
return;
}
int[] ans = new int[n+1];
//每个数加自身都是偶数,除了2以外的正偶数都是合数
for(int i=1;i<=n;i++){
ans[i] = i;
}
//因此只需要处理一下a1
if(n%2==1){
ans[1] = n;
ans[n] = 1;
}else{
ans[1] = n-1;
ans[n-1] = 1;
}
for(int i=1;i<=n;i++){
System.out.print(ans[i]+" ");
}
}