博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JAVA代码—算法基础:素数环问题
阅读量:4041 次
发布时间:2019-05-24

本文共 1795 字,大约阅读时间需要 5 分钟。

素数环问题

问题描述:输入正整数n,把整数1,2,3,…n组成一个环,使得相邻两个整数之和均为素数。输出时从整数1开始逆时针排列。同一个环应恰好输出一次。N<=16。

输入样例:6

输出样例:

1 4 3 2 5 6

1 6 5 2 3 4

算法设计:

package com.bean.algorithmbasic;public class PrimeRing {
/* * 将从1到n这n个整数围成一个圆环,若其中任意2个相邻的数字相加,结果均为素数,那么这个环就成为素数环。 * */ public static int NUMLENGTH = 20; public static void main(String args[]) { int[] arr = new int[NUMLENGTH]; arr[0] = 1;// 第一个数字只能为1 int k = 1; while (k >= 1) {
// 极小边界限制 arr[k] = arr[k] + 1; while (arr[k] < NUMLENGTH) {
// 极大边界限制 if (check(arr, k) == 1) break;// 符合条件,跳出循环 else arr[k] = arr[k] + 1;// 叠加到下一位 } if (arr[k] <= NUMLENGTH && k == NUMLENGTH - 1) {
// 求解完毕,输出解 for (int x : arr) System.out.print(x + " "); return; } if (arr[k] < NUMLENGTH && k < NUMLENGTH - 1) {
// 填写下一个位置 k = k + 1; } else { arr[k--] = 0;// 回溯 } } } /** * 判断当前放进的数字是否符合条件 : * 1.是否与之前重复 * 2.相邻之和是否素数 * 3.第一个和最后一个相加是否为素数 */ public static int check(int[] arr, int k) { int flag = 0; for (int i = 0; i < k; i++) {
// 是否与之前重复 if (arr[i] == arr[k]) return 0; } flag = prime(arr[k - 1] + arr[k]);// 相邻之和是否素数 if (flag == 1 && k == NUMLENGTH - 1) {
// k保证了为最后一个;第一个和最后一个相加是否为素数 flag = prime(arr[0] + arr[k]); } return flag; } /* * 判断之和是否为素数 */ public static int prime(int sum) { int n = (int) Math.sqrt(sum); for (int i = 2; i <= n; i++) { if (sum % i == 0) return 0; } return 1; }}

(完)

转载地址:http://igvdi.baihongyu.com/

你可能感兴趣的文章
c++字符数组和字符指针区别以及str***函数
查看>>
c++类的操作符重载注意事项
查看>>
c++模板与泛型编程
查看>>
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>