素数环 与 算法 全排列

在说起全排列前,先说一下昨天碰到的一个题目(答案不是我做出来的,但是我感觉有好多个亮点,贴出来方便日后的学习):

 

素数环

时间限制:1000 ms  |  内存限制:65535 KB
难度:2
描述

有一个整数n,把从1到n的数字无重复的排列成环,且使每相邻两个数(包括首尾)的和都为素数,称为素数环。

为了简便起见,我们规定每个素数环都从1开始。例如,下图就是6的一个素数环。

输入
有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束。
输出
每组第一行输出对应的Case序号,从1开始。
如果存在满足题意叙述的素数环,从小到大输出。
否则输出No Answer。
样例输入
6
8
3
0
样例输出
Case 1:
1 4 3 2 5 6
1 6 5 2 3 4
Case 2:
1 2 3 8 5 6 7 4
1 2 5 8 3 4 7 6
1 4 7 6 5 8 3 2
1 6 7 4 3 8 5 2
Case 3:
No Answer








这个题的解法我考虑了很久,怎么说呢,感觉上并不是一道难度很大的题,实际操作起来却又无从下手。我说一下我的思考过程
首先,这牵扯到寻找素数,但是呢,不是简单的找素数,而是两个数的和,在[1,n]之间的两个数m,n的和

        有多组测试数据,每组输入一个n(0<n<20),n=0表示输入结束。

这句话可以看出输入的n,最大,也就20.那么,即使在跑程序的时候,当真输入为20,最大的的一个和值也就是20+20=40,那么,我完全可以把[1,40]间的素数全部找出来并建立一个数
组s[40],然后在[1,n]间查看,看哪两个数的和是素数,通过在数组s[40]里查找是否符合,若符合,将符合的值存放在一个数组里,而后输出。
#include <stdio.h>
#include<string.h>
int count,sa[40];    //  coount 用于控制输出流    sa[]是一个用来显示区间[2,42]内每个数是否为素数的数组,若为素数,其对应的sa[j]=1/*** found 函数的定义,据作者说是由全排列改编过来的 ***/ void found(int n,int cur,int a[],int flag[]){  // 传入的 n 为 in[]数组中的元素,即输入值;  cur 初始值为1  是用于控制a[]的下标  ; a[]是一个a[0]=1的用于存放可满足数的数组; // flag[]是一个初始值全部置0的数组 , 用于储存在判定检查过程中的数是否为要用的值后的布尔值if(cur==n&&sa[a[0]+a[cur-1]])            // 这里用cur 与 输入值 n 进行比较判断  也就是说 a数组里存放的个数最多 n个,最多把[1,n]之间的值全部放进去,或者说数组a里的最大值肯定不能大于n   
{                                     {                                         for(int i=0;i<n;i++)            printf("%d ",a[i]);                //  那么,当a数组检查n是否可以存放时,这次遍历也就到此结束了,也就是该输出数组a了putchar('\n');                    count=0;                            }    
}
/***** 在cur!=n时,需要进一步的检查时,利用递归,在区间[2,n],以此将满足的数存放在a[]中 *****/else                                                                                   //
        for(int i=2;i<=n;i++)                                                              //
        if(!flag[i]&&sa[i+a[cur-1]])                                                       //              {                                                                               //
            a[cur]=i;                                                                  //
            flag[i]=1;                                                                //
            found(n,cur+1,a,flag);                                                   //
            flag[i]=0;                                                              //
        }                                                                          //
}                                                                                 //
/*********************************************************************************/ 
int main(void)
{int i=0,a[20],in[100],flag[20];   // in[20] 用于存放输入 memset(sa,0,sizeof(sa));            memset(flag,0,sizeof(flag));
/***********************************************************/ for(int ok=1,k=2,j=2;j<40;j++,ok=1)                   //
    {                                                    //
        for(int i=2;i<=j/2;i++)                         //   在区间[2,40]里进行是否为素数的判定   用j控制数组sa的下标,同时,j还是一个数列【2,,40】 {                                              //
            if(j%i==0)    ok=0;                       //  若为素数,sa[j]=1,否则不对sa[j]处理,即为0 }                                            //
        if(ok) sa[j]=1;                             //
    }                                              //
/**************************************************/    /**************************************/do                                  //    我很喜欢这段控制输入的代码{                                 //     scanf("%d",&in[i++]);      //   很简单  但是很巧妙 }while(in[i-1]);              //    
/********************************///        大方  优雅 a[0]=1;    for(int j=1;j<i;j++)        {count=1;   printf("Case %d:\n",j);  // j 显示输入的数据的个数  if(!(in[j-1]%2)||in[j-1]==1) found(in[j-1],1,a,flag);  // if里判定 in[]数组里的元素是否为奇数 或者是为1   两种情况均调用函数 if(count)    printf("No Answer\n");   } return 0;
}

 

 

 先简单简单注释一下,可能在匆忙之中有一些错误,哪位有发现,多谢指出

 

转载于:https://www.cnblogs.com/zhangzimu/p/6187187.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/469701.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

简单线性回归(Simple Linear Regression)和多元线性回归(Multiple Regression)学习笔记

简单线性回归(Simple Linear Regression) 0.前提介绍: 为什么需要统计量? 统计量:描述数据特征 0.1集中趋势衡量 0.1.1均值(平均数&#xff0c;平均值) (mean)&#xff1a;&#xff08;求和除以个数&#xff0c;Ex也可以表示x求均值&#xff09; 0.1.2中位数(median) : 将数…

开机自启动和由一个APK启动另一个APK核心代码

1、开机自启动 public class BootReceiver extends BroadcastReceiver {private static final String ACTION "android.intent.action.BOOT_COMPLETED";private static final String TAG "ZED_Led_Receiver";private static final String FileName &quo…

智慧交通day02-车流量检测实现10:多目标追踪实现

在这里我们主要实现了一个多目标跟踪器&#xff0c;管理多个卡尔曼滤波器对象&#xff0c;主要包括以下内容&#xff1a; 初始化&#xff1a;最大检测数&#xff0c;目标未被检测的最大帧数 目标跟踪结果的更新&#xff0c;即跟踪成功和失败的目标的更新 初始化 def __init_…

centos安装python3.5和pip

#安装zlib openssl openssl-devel yum install -y zlib zlib-devel yum install openssl -y yum install openssl-devel -ywget https://www.python.org/ftp/python/3.5.0/Python-3.5.0.tgz #下载tar Jxvf Python-3.5.0.tar.xz #解压cd Python-3.5.0 #进入目录mkdi…

聚类(Clustering):hierarchical clustering 层次聚类及其应用

聚类(Clustering):hierarchical clustering 层次聚类及其应用 clustering实现&#xff1a; from numpy import * import math #基于matrix计算的pakage#定义树形结构图的结点&#xff0c;当再往上两则分为一类时则将其连接起来 #用面向对象(class)的方法实现此次的代码: clas…

具有IOctl的简单字符驱动

http://www.cnblogs.com/geneil/archive/2011/12/04/2275372.html 驱动层 #include <linux/init.h> #include <linux/module.h> #include <linux/cdev.h> #include <linux/fs.h> #include <linux/device.h> #include <linux/module.h> #i…

智慧交通day02-车流量检测实现11:yoloV3模型

yoloV3以V1&#xff0c;V2为基础进行的改进&#xff0c;主要有&#xff1a;利用多尺度特征进行目标检测&#xff1b;先验框更丰富&#xff1b;调整了网络结构&#xff1b;对象分类使用logistic代替了softmax,更适用于多标签分类任务。 1.算法简介 YOLOv3是YOLO (You Only Loo…

bzoj1992鬼谷子的钱袋(二分乱搞 二进制)

1192: [HNOI2006]鬼谷子的钱袋 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 3223 Solved: 2333Descriptio 鬼谷子非常聪明&#xff0c;正因为这样&#xff0c;他非常繁忙&#xff0c;经常有各诸侯车的特派员前来向他咨询时政。有一天&#xff0c;他在咸阳游历的时候&…

聚类(Clustering): K-means算法

聚类(Clustering): K-means算法 1.归类: 聚类(clustering)属于非监督学习(unsupervised learning) 无类别标记( class label) 3. K-means 算法&#xff1a; 3.1 Clustering 中的经典算法&#xff0c;数据挖掘十大经典算法之一 3.2 算法接受参数 k &#xff1b;然后将事先输入…

ubuntu12.04

http://blog.sina.com.cn/s/blog_92942dba01014r7z.html

智慧交通day02-车流量检测实现12:基于yoloV3的目标检测

在本章节代码编写中&#xff0c;发现之前的代码所处的环境是python3&#xff0c;因此导致了cv2.dnn.readNetFromDarknet()在代码运行中导致了i[0]的获值失败&#xff0c;故总结如下&#xff1a; cv2.dnn.readNetFromDarknet()在python3上遇到的问题_李大狗的读研日记-CSDN博客…

非线性回归(Non-linear Regression)

非线性回归应用&#xff08;Logistic Regression Application&#xff09; 理论实际应用整合到一起链接 import numpy as np import random# 一个函数为梯度下降的算法 def GradientDescent(x,y,theta,alpha,m,numInterations):# m denotes the number of examples here, not…

cv2.dnn.readNetFromDarknet()在python3上遇到的问题

问题描述&#xff1a; 代码如下 net cv2.dnn.readNetFromDarknet(configPath,weightsPath) #获取YOLO每一层的名称 #getLayerNames&#xff08;&#xff09;&#xff1a;获取网络所有层的名称。 ln net.getLayerNames() # 获取输出层的名称: [yolo-82,yolo-94,yolo-106] # …

企业的网站遭受木马攻击了,导致网站目录下所有文件都被篡改了

问题&#xff1a; 一个 lamp 的服务器站点目录下所有文件均被植入如下内容 <script languagejavascript srchttp://luoahong.blog.51cto.com/504977/1827164> 包括图片文件也被植入了&#xff0c;网站打开时就会调用这个地址&#xff0c;造成的影响很恶劣。 实际解决办法…

智慧交通day02-车流量检测实现13:基于虚拟线圈法的车辆统计+视频中的车流量统计原理解析

1.基于虚拟线圈法的车辆统计 基于虚拟线圈的车流量统计算法原理与交通道路上的常见的传统的物理线圈类似&#xff0c;由于物理线圈需要埋设在路面之下&#xff0c;因此会有安装、维护费用高&#xff0c;造成路面破坏等问题&#xff0c;而采用基于视频的虚拟线圈的车辆计数方法…

ValueError: Found array with dim 4. Estimator expected和ValueError: Expected 2D array, got 1D array i

python3中对numpy数组进行降维或升维 解决报错如&#xff1a; 1.ValueError: Found array with dim 4. Estimator expected 2.ValueError: Expected 2D array, got 1D array instead: 报错1ValueError: Found array with dim 4. Estimator expected——解决方式&#xff1a…

ubuntu 12.04 eclipse 安装

方法二&#xff1a;(优点是安装内容清爽&#xff0c;缺点是配置麻烦) 1、安装JDK&#xff0c;参考 Ubuntu 12.04 下安装 JDK 7 2、下载 Eclipse 从 http://www.eclipse.org/downloads/index-developer.php下载合适版本&#xff0c;如&#xff1a;Eclipse IDE for C/C Develope…

智慧交通day02-车流量检测实现14:代码汇总+问题修正

代码权重文件资源https://download.csdn.net/download/qq_39237205/43072746https://download.csdn.net/download/qq_39237205/43072746 环境要求&#xff1a;python2.7 环境配置&#xff1a;见文末requirements.txt 1.YOLO.py # encoding:utf-8 import imutils import tim…

终端mysql Operation not permitted错误解决方案

前言 前段时间装mysql&#xff0c;就遇到了ln: /usr/bin/mysql: Operation not permitted的错误&#xff0c;网上好多方法都过时了&#xff0c;下边是我的解决方法 原因 这是因为苹果在OS X 10.11中引入的SIP特性使得即使加了sudo&#xff08;也就是具有root权限&#xff09;也…

从资源池和管理的角度理解物理内存

早就想搞一下内存问题了&#xff01;这次正趁着搞bigmemory内核&#xff0c;可以写一篇文章了。本文旨在记录&#xff0c;不包含细节&#xff0c;细节的话&#xff0c;google&#xff0c;百度均可&#xff0c;很多人已经写了不少了。我只是按照自己的理解记录一下内存的点点滴滴…