神奇数-Java-牛客模拟三

本文介绍了一个算法问题,即如何在给定区间内找出所有“神奇数”。神奇数是指该数中存在不同位置的两个数位组成的两位数为质数。文章提供了完整的Java实现代码,并详细解释了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package 模拟三;

import java.util.ArrayList;
import java.util.Scanner;

/**
 * 题目描述:给出一个区间[a, b],计算区间内“神奇数”的个数。
 * 神奇数的定义:存在不同位置的两个数位,组成一个两位数(且不含前导0),且这个两位数为质数。
 * 比如:153,可以使用数字3和数字1组成13,13是质数,满足神奇数。同样153可以找到31和53也为质数,只要找到一个质数即满足神奇数。
 * 输入描述:输入为两个整数a和b,代表[a, b]区间 (1 ≤ a ≤ b ≤ 10000)。//注意次数要包含a,和b。
 * 输出描述: 输出为一个整数,表示区间内满足条件的整数个数
 * 
 * 输入例子: 11 20
 * 输出例子: 6
 * 
 * @author 崔洪振367
 * @version 创建时间:2017年5月22日 下午10:29:55
 * 解题思路:从a到b逐个判断,是不是“神奇数”。该题目给出的解决方法中:是通过两层for循环来判断任意组合的两位数中是否包含质数。
 */
public class Q2017_2神奇数 {

	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		
		while(scanner.hasNext()){
			int a = scanner.nextInt();
			int b = scanner.nextInt();
			int count = 0;//统计神奇数字的个数
			
			if(b<10){
				//因为范围内不包含大于两位的数字,因此不能组成两位的数字,也就不能组成神奇数字
				System.out.println(0);
				return;
			}
			
			for(int i=a; i<=b; i++){
				boolean isP = false;
				int temp = i;
				ArrayList<Integer> list = new ArrayList<>();
				while(temp != 0){//将数字i逐位存放到ArrayList中
					list.add(temp%10);
					temp = temp / 10;
				}
				
				//判断每个数字是不是神奇的数字
				for(int k=0; k<list.size();k++){
					if(list.get(k) == 0){
						continue;
					}
					for(int j=0; j<list.size();j++){
						if(k == j){//和前边的数值一样
							continue;
						}
						//和前边的数值不一样,则重新组合成一个二位数
						int newNum = list.get(k)*10 + list.get(j);
						if(isPrime(newNum)){
							isP = true;
							break;
						}
					}//for--j
					//如果是神奇的数字,则后边的数字不用再判断
					if(isP == true){
						count++;
						break; 
					}
				}//for--k
			}//for--i
			System.out.println(count);
		}
		scanner.close();
	}
	/**
	 * 判断数字number是不是质数
	 * @param number
	 * @return
	 */
	public static boolean isPrime(int number) {
		for (int i = 2; i < number; i++) {
			if (number % i == 0) {
				return false;
			}
			continue;
		}
		return true;
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值