360笔试算法题

目录
  1. 题目
    1. 描述
    2. 解答源码

题目

描述

  如图所示,为题目截图。

360_1

360_2

解答源码

  思路:对于给定的整数N,查找[2,N)的所有质数添加到列表之中,然后依次用列表中的数从小到大去除N,如果能整除,则N的规模减小,减小后的N重复上述操作。源码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
private static String[][] num = new String[10][5];
static{
num[0][0] = " - ";
num[0][1] = "| |";
num[0][2] = " ";
num[0][3] = "| |";
num[0][4] = " _ ";

num[1][0] = " ";
num[1][1] = " |";
num[1][2] = " ";
num[1][3] = " |";
num[1][4] = " ";

num[2][0] = " - ";
num[2][1] = " |";
num[2][2] = " - ";
num[2][3] = "| ";
num[2][4] = " - ";

num[3][0] = " - ";
num[3][1] = " |";
num[3][2] = " - ";
num[3][3] = " |";
num[3][4] = " - ";

num[4][0] = " ";
num[4][1] = "| |";
num[4][2] = " - ";
num[4][3] = " |";
num[4][4] = " ";

num[5][0] = " - ";
num[5][1] = "| ";
num[5][2] = " - ";
num[5][3] = " |";
num[5][4] = " - ";

num[6][0] = " - ";
num[6][1] = "| ";
num[6][2] = " - ";
num[6][3] = "| |";
num[6][4] = " - ";

num[7][0] = " - ";
num[7][1] = " |";
num[7][2] = " ";
num[7][3] = " |";
num[7][4] = " ";

num[8][0] = " - ";
num[8][1] = "| |";
num[8][2] = " - ";
num[8][3] = "| |";
num[8][4] = " - ";

num[9][0] = " - ";
num[9][1] = "| |";
num[9][2] = " - ";
num[9][3] = " |";
num[9][4] = " - ";
}
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
while(cin.hasNextInt())
{
int inputNum = cin.nextInt();
ArrayList<Integer> rslt = getRslt(inputNum);
if(rslt.size() == 0){
rslt.add(inputNum);
}
//打印乘积
printNum(rslt);
}
}

public static ArrayList<Integer> getRslt(int x){
ArrayList<Integer> allZhishu = getZhishuArray(x);
ArrayList<Integer> rslt = new ArrayList<Integer>();
int i = 0;
while(x > 1){
if(i >= allZhishu.size()){
break;
}
if(x % allZhishu.get(i) == 0){
x = x / allZhishu.get(i);
rslt.add(allZhishu.get(i));
i = 0;
}else{
i ++;
}
}
return rslt;
}

public static ArrayList<Integer> getZhishuArray(int x){
ArrayList<Integer> allZhishu = new ArrayList<Integer>();
//获取x范围内的所有质数
for(int i = 2; i < x; i ++){
boolean isZhishu = true;
double tmp = Math.sqrt(i);
for(int j = 2; j < tmp; j ++){
if(i % j == 0){
isZhishu = false;
break;
}
}
if(isZhishu){
allZhishu.add(i);
}
}
return allZhishu;
}

public static void printNum(ArrayList<Integer> rslt){
String[] printStr = new String[]{"","","","",""};
for(int i = 0; i < rslt.size(); i ++){
String s = String.valueOf(rslt.get(i));
for(int j = 0; j < s.length(); j ++){
int inex = Integer.valueOf(s.charAt(j)-48);
printStr[0] += num[inex][0];
printStr[1] += num[inex][1];
printStr[2] += num[inex][2];
printStr[3] += num[inex][3];
printStr[4] += num[inex][4];
}
if(i < rslt.size() - 1){
printStr[0] += " ";
printStr[1] += " ";
printStr[2] += "*";
printStr[3] += " ";
printStr[4] += " ";
}
}
for(int i = 0; i < 5; i ++){
System.out.println(printStr[i]);
}

}

}