【蓝桥杯】【组素数】
来源:互联网 发布:丹朱围棋软件 编辑:程序博客网 时间:2024/05/21 09:07
题目:
组素数
素数就是不能再进行等分的数。比如:2 3 5 7 11 等。9 = 3 * 3 说明它可以3等分,因而不是素数。
我们国家在1949年建国。如果只给你 1 9 4 9 这4个数字卡片,
可以随意摆放它们的先后顺序(但卡片不能倒着摆放啊,我们不是在脑筋急转弯!),那么,你能组成多少个4位的素数呢?
比如:1949,4919 都符合要求。
请你提交:能组成的4位素数的个数,不要罗列这些素数!!
注意:不要提交解答过程,或其它的辅助说明文字。
分析:这个题目有两种思想去做,一种是递归的思想找出所有可能的组合,一种是循环所有的四位数情况来找到正确的组合;但是我们要注意组合后的数据重复性问题。
补充知识:
HashSet类
Java.util.HashSet类实现了Java.util.Set接口
(1)它不允许出现重复元素
(2)不保证集合中的元素是按顺序存储的
(3)允许包含值为null的元素,但最多只能有一个null元素
(4)底层基于hash表实现,放入的对象必须实现hashCode()方法,放入的对象是以hashcode作为标识
TreeSet类
Java.util.TreeSet类实现了Java.util.Set接口
(1)它不允许出现重复元素
(2)保证集合中的元素是按升序顺序存储的
(3)不允许包含值为null的元素
(4)底层基于二叉树实现,元素自动排好序
Arrays类
能方便的操作数组,提供的所有方法都是静态的:
(1)给数组赋值,使用fill()方法
(2)给数组排序,使用sort()方法,升序排列
(3)通过equals()方法比较数组中的元素是否相等
(4)通过binarySearch()能对排序好的数组进行二分查找
第一种解题源码:
public class Test004 {public static void main(String[] args) {HashSet<String> set = new HashSet<String>(); //初始化集合int counter = 0; //计数变量for(int i=1000; i<=9999; i++){String tempStr = String.valueOf(i);char[] tempCharArray = tempStr.toCharArray();Arrays.sort(tempCharArray);String str = String.valueOf(tempCharArray);if(str.equals("1499")){set.add(tempStr);}}Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String str = (String) iterator.next();if(isPrimtiveNumber(Integer.valueOf(str))){counter++;}}System.out.println("counter=" + counter);}/** * 判断一个数是否是素数 * * @param n * @return 如果n是素数,返回true;如果n不是素数,返回false */private static boolean isPrimtiveNumber(int n){boolean isPrimitive = true;for(int i=2; i<n; i++){if(n%i == 0){isPrimitive = false;break;}}return isPrimitive;}}
第二种方式是使用递归思想,源码如下:
public class Test005 {private static int counter;private static HashSet<String> set;public static void main(String[] args) {counter = 0;set = new HashSet<String>();char[] a = {'1','4','9','9'};findX(a, 0);Iterator<String> iterator = set.iterator();while (iterator.hasNext()) {String str = (String) iterator.next();if(isPrimtiveNumber(Integer.valueOf(str))){counter++;}}System.out.println(counter);}/** * 递归方法遍历找出所有的组合 * * @param b 原始数组 * @param index 递归过程中的子数组头指针 */private static void findX(char[] b, int index){if(index >= b.length){return;}if(index == b.length-1){String str = String.valueOf(b);if(isPrimtiveNumber(Integer.valueOf(str))){set.add(str);}return;}for(int i=index; i<b.length; i++){//交换位置{char c = b[index];b[index] = b[i];b[i] = c;}set.add(String.valueOf(b));findX(b, index+1);//回溯{char c = b[index];b[index] = b[i];b[i] = c;}}}/** * 判断一个数是否是素数 * * @param n * @return 如果n是素数,返回true;如果n不是素数,返回false */private static boolean isPrimtiveNumber(int n){boolean isPrimitive = true;for(int i=2; i<n; i++){if(n%i == 0){isPrimitive = false;break;}}return isPrimitive;}}
1 0
- 【蓝桥杯】【组素数】
- 组素数
- 组素数
- 组素数
- 组素数
- 组素数
- 蓝桥杯 找素数 Java
- 蓝桥杯 找素数
- 蓝桥杯:找素数
- 蓝桥杯+金蝉素数
- ACM:蓝桥杯:素数
- 蓝桥杯素数等差数列问题
- 蓝桥杯:梅森素数
- 【蓝桥杯】【金蝉素数】
- 素数三元组
- 2.标题: 组素数
- 素数
- 素数
- 读书笔记--IPC机制(一)
- Android——自定义通知栏使用
- 使用Enterprise Architect 设计数据库
- Python基础——@staticmethod与@classmethod
- JS判断是否是微信页面,判断手机操作系统(ios或android)并跳转到不同下载页面
- 【蓝桥杯】【组素数】
- CSS代码重置浏览器默认样式
- 【鸟哥读书笔记】Linux 文件权限及相关操作
- 亲身实践解决 : insmod hello.ko -1 Invalid module format 的问题
- hdu 1874 畅通工程续(dijkstr朴素)
- 溢出 隐式转换 负数存储
- 快速排序的基本思想及其java的实现
- DEDECMS自定义表单时间戳转换成常规时间方法及添加时间方法
- 第一行代码总结:10网络:10.1WebView的用法