当前位置: 首页 > article >正文

ZT7 小红的排列构造

描述

小红希望你构造一个排列,满足对于排列中的每一项ai​都满足:ai​+i均不是质数(下标i从1开始)。你能帮帮她吗?

长度为n的排列是指:一个长度为n的数组,其中1到n每个正整数恰好出现1次。例如[2,1,3]是排列,而[1,3,4,3]不是排列。    

输入描述:

一个正整数n,代表待构造的排列长度。
1≤n≤10^5

输出描述:

如果无法构造,则输出-1。
否则输出一个长度为n的满足要求的排列。有多解时输出任意即可。

示例1

输入:

1

输出:

-1

说明:

长度为1的排列只有[1],由于1+1=2是质数,不合法。所以不存在可以构造的排列。

示例2

输入:

10

输出:

9 4 6 2 1 8 3 10 7 5

说明:

a1​+1=9+1=10,不是质数。
a2​+2=4+2=6,不是质数。
a3​+3=6+3=9,不是质数。
以此类推,每个元素ai​加上i均不是质数。符合要求。
一、问题分析

首先读题,仔细看描述中的内容,发现需求是

1.构造一个排列

2.对于排列中的每一项ai都满足

3.ai+i(当前的下标,从1开始)不是质数

4.如果可以则输出长度为n的排列

5.如果不可以输出-1

二、解题思路

1.如果n为1,则无法构造

1 + 1 = 2是质数

2.如果n为2

排列的方法有两种一种是

1 2

一种是

2 1

由于1不能在第一个位置(+1=2是质数)

所以看看第二种排列

2 + 1 = 3是质数(所以也不可以)

所以输出-1

3.再看看如果n为3

1 2 3不行

2 1 3不行(前面不能放1和2)

3 1 2不行(1+2=3是质数)

3 2 1(可以,3+1=4,2+2=4,1+3=4)

4.再来看看n如果是4的话呢

(1,2肯定不能放前面)

3 2 1 4(4+4=8,不是质数)

5.现在找到规律了,前面不能放1,2

后面的话,只需要放和自己相同的数字就行了

因为自己和自己相加一定是2的倍数,就不是质数了

三、具体步骤

使用的语言是C

#include <stdio.h>

int main() {
    int n;
    while (scanf("%d", &n) != EOF) { 
        if(n < 3) {
            printf("-1\n");
            return 0;
        } else {
            printf("3 2 1");
            for(int i = 4; i <= n; i++) {
                printf(" %d", i);
            }
        }
    }
    return 0;
}


http://www.kler.cn/a/557575.html

相关文章:

  • 【Python爬虫(46)】解锁分布式爬虫:实时数据处理的奥秘
  • 在Django中安装、配置、使用CKEditor5,并将CKEditor5录入的文章展现出来,实现一个简单博客网站的功能
  • 人工智能三剑客:符号主义、连接主义与行为主义的较量与融合
  • RocketMQ事务消息原理
  • 爬虫小案例豆瓣电影top250(json格式)
  • C++如何获取windows系统通知消息列表
  • RoCBert:具有多模态对比预训练的健壮中文BERT
  • 【Qt】可爱的窗口关闭确认弹窗实现
  • Svelte 最新中文文档教程(16)—— Context(上下文)
  • 微信小程序数据绑定与事件处理:打造动态交互体验
  • Ubuntu 22.04 Install deepseek
  • MongoDB应用设计调优
  • My Metronome for Mac v1.4.2 我的节拍器 支持M、Intel芯片
  • 微软CEO-纳德拉访谈-AGI计划
  • RT-Thread+STM32L475VET6——USB鼠标模拟
  • Java 虚拟机(JVM)方法区详解
  • tortoiseSVN 如何克隆项目到本地
  • 机器学习实战(7):聚类算法——发现数据中的隐藏模式
  • 化学品安全数据表(MSDS)的全面解析与实用指南
  • JAVAweb-标签选择器,盒模型,定位,浮动