ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

【每日蓝桥】2、一三年省赛JavaC组真题“组素数”

2021-01-10 16:31:57  阅读:388  来源: 互联网

标签:组真题 排列 JavaC int 元素 arr 蓝桥 素数 num


你好呀,我是灰小猿,一个超会写bug的程序猿!

欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!

标题:组素数

素数就是不能再进行等分的数,比如:2、3、5、7、11等

9=3*3 说明它可以3等分,因而不是素数

我们国家在1949年建国,如果只给你1、9、4、9这4个数字卡片,可以随意摆放它们的先后顺序,(但卡片不能倒着摆放啊,我们不是在做脑筋急转弯)

那么你能组成多少个4位的素数呢?

比如1949、4919都符合要求

请你提交能组成的4位素数的个数,不要罗列这些素数!!

注意:不要提交解答过程,或其他的辅助说明文字

考察重点:

递归和回溯算法下对元素的全排列、素数的判断、重复元素的去重

在这道题中我们需要重点掌握的就是递归和回溯算法下对元素的全排列,根据该思想对1、9、4、9这四个数进行全排列,获取到排列结果,然后对排列结果进行判断,判断其是不是素数,之后记录符合要求的素数的个数即可。

答案源码:

package 一三年省赛真题;

import java.util.HashSet;
import java.util.Set;

public class Year2013_t2 {

	static Set<Integer> set = new HashSet<Integer>();	//定义hash集合,存放符合要求的数值
	/**
	 * 数组元素的全排列
	 * @param arr 数据数组
	 * @param n	从第几个元素开始排列
	 * */
	public static void arrange(int[] arr,int n) {
		//如果排列的数值的序号等于数组的长度,说明最后一个元素已经确定
		if (n==arr.length) {
			int num = arr[0]*1000 + arr[1]*100 + arr[2]*10 + arr[3];
			//如果是素数
			if (check(num)==num) {
				set.add(num);	//将数值添加到集合中,并去重
			}
		}
		for (int i = n; i < arr.length; i++) {
			//数值交换
			int t = arr[n];
			arr[n] = arr[i];
			arr[i] = t;
			
			arrange(arr, n+1);    //确定下一个数值
			
			t = arr[n];
			arr[n] = arr[i];
			arr[i] = t;
			
		}
	} 
	
	/**
	 * 判断一个数是不是素数
	 * @return 是素数就返回该数,不是就返回0
	*/
	private static int check(int num) {
		for (int i = 2; i <= Math.sqrt(num); i++) {
			if (num % i == 0) {
				return 0;
			}
		}
		return num;
	}


	public static void main(String[] args) {
		int[] array = {1,9,4,9};
		arrange(array, 0);
		System.out.println(set.size());	//输出存放在集合中的符合要求的数据长度
	}

}

 

输出样例:

其中有不足或者改进的地方,还希望小伙伴留言提出,一起学习!

感兴趣的小伙伴可以关注专栏!

灰小猿陪你一起进步!

 

标签:组真题,排列,JavaC,int,元素,arr,蓝桥,素数,num
来源: https://blog.csdn.net/weixin_44985880/article/details/112431034

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有