小红希望你构造一个排列,满足对于排列中的每一项都满足:均不是质数(下标从1开始)。你能帮帮她吗?
长度为的排列是指:一个长度为的数组,其中1到每个正整数恰好出现1次。例如[2,1,3]是排列,而[1,3,4,3]不是排列。
一个正整数,代表待构造的排列长度。
如果无法构造,则输出-1。
否则输出一个长度为的满足要求的排列。有多解时输出任意即可。
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]+" "); } }