在一行上输入一个整数
,表示需要构造的排列长度。
如果不存在满足条件的排列,在一行上输出
;否则,在一行上输出
个整数
表示一个符合要求的排列。当存在多种可行方案时,输出任意一种均可。
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; }
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]+" "); } }