一道关于素数的问题
2009-05-11 15:53
225 查看
【题目要求】
将1-20这20个连续的自然数排成一圈,使任意2个相邻的自然数之和为素数。
【解法】
将1-20这20个连续的自然数排成一圈,使任意2个相邻的自然数之和为素数。
【解法】
package test; import java.util.HashMap; import java.util.Map; /** * 将1-20这20个自然数排成一圈,使任意2个相邻的自然数之和为素数。 */ public class PrimeNumberRing { private static final int N = 20; private Map<Integer, String> primeNumMap = new HashMap<Integer, String>(); private Map<Integer, String> useNumMap = new HashMap<Integer, String>(); private int[] resArray = new int[N + 1]; public PrimeNumberRing() { primeNumMap.put(2, ""); primeNumMap.put(3, ""); primeNumMap.put(5, ""); primeNumMap.put(7, ""); primeNumMap.put(11, ""); primeNumMap.put(13, ""); primeNumMap.put(17, ""); primeNumMap.put(19, ""); primeNumMap.put(23, ""); primeNumMap.put(29, ""); primeNumMap.put(31, ""); primeNumMap.put(37, ""); resArray[0] = N; resArray = N; useNumMap.put(N, ""); } public void getResult() { realCal(N - 1); for (int num = 1; num <= N; num++) { System.out.print(resArray[num] + " "); } } private boolean realCal(int num) { if (num == 0) { if (primeNumMap.containsKey(resArray[0] + resArray[1])) return true; else return false; } for (int i = N - 1; i > 0; i--) { if (useNumMap.containsKey(i)) continue; if (primeNumMap.containsKey(i + resArray[num + 1])) { resArray[num] = i; useNumMap.put(i, ""); if (realCal(num - 1)) { return true; } else { resArray[num] = 0; useNumMap.remove(i); } } } return false; } public static void main(String[] args) { new PrimeNumberRing().getResult(); } }
相关文章推荐
- 一道关于停车计费的问题
- 一道经典的C++题,关于分钱的问题,适合新手阅读(黑客X档案论坛题目) [c#]
- 对一道面试题的总结与扩展思考(关于一笔画问题的数学分析)
- 一道关于组合的问题,例如ABCD,他们有多少种组合,请你输出来,算法有两种。
- 一道关于扔球的DP问题
- 关于pku一道期中考试题,老赵发起的问题(更新)
- 一道面试题:关于fork的问题
- 关于位图的一道典型问题
- 一道关于C++二维数组的问题
- 一道关于继承类的sizeof大小问题
- 一道面试题关于Integer的缓存范围(-128~127)所引起的一系列问题记录
- 一道关于随机数问题的程序解
- 一道 C++ 关于野指针和作用域的问题
- python一道关于异常处理的问题
- 一道简单的C++笔试题,关于抽象shape类求图形周长的问题~
- 关于素数问题总结
- python一道关于颠倒字典中键值的问题
- 一道关于二级指针传参的问题
- 跪求一道关于c语言和数据结构的问题
- 一道经典的关于Fibonacci数列的面试题(问题)的新想法 -> N阶楼梯问题