您的位置:首页 > 编程语言 > Java开发

神奇数-Java-牛客模拟三

2017-05-26 21:38 204 查看
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;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: