-
Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy path4thought.java
More file actions
114 lines (90 loc) · 2.51 KB
/
4thought.java
File metadata and controls
114 lines (90 loc) · 2.51 KB
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
import java.util.Scanner;
import java.util.HashMap;
public class 4thought {
public static String op(int in) {
if (in == 0)
return " * ";
if (in == 1)
return " + ";
if (in == 2)
return " - ";
return " / ";
}
public static String build(int a, int b, int c) {
return "4" + op(a) + "4" + op(b) + "4" + op(c) + "4";
}
public static int arith(String oper) {
int num1 = Integer.parseInt(oper.substring(0 , oper.indexOf(" ")));
int num2 = Integer.parseInt(oper.substring(oper.lastIndexOf(" ") + 1));
if (oper.contains(" * "))
return num1 * num2;
if (oper.contains(" + "))
return num1 + num2;
if (oper.contains(" - "))
return num1 - num2;
return num1 / num2;
}
public static int eval(String input) {
while (input.contains(" * ") || input.contains(" / "))
{
int mult = input.indexOf("*");
int divi = input.indexOf("/");
int sub1 = mult - 2;
int sub2 = mult + 2;
if ((divi < mult && divi != -1) || mult == -1)
{
sub1 = divi - 2;
sub2 = divi + 2;
}
while (sub1 != 0 && !input.substring(sub1 , sub1 + 1).equals(" "))
sub1--;
if (sub1 != 0)
sub1++;
while (sub2 != input.length() && !input.substring(sub2 , sub2 + 1).equals(" "))
sub2++;
input = input.substring(0 , sub1) + arith(input.substring(sub1 , sub2)) + input.substring(sub2);
}
while (input.contains(" + ") || input.contains(" - "))
{
int add = input.indexOf(" + ");
int sub = input.indexOf(" - ");
int sub1 = add - 1;
int sub2 = add + 3;
if ((sub < add && sub != -1) || add == -1)
{
sub1 = sub - 1;
sub2 = sub + 3;
}
while (sub1 != 0 && !input.substring(sub1 , sub1 + 1).equals(" "))
sub1--;
if (sub1 != 0)
sub1++;
while (sub2 != input.length() && !input.substring(sub2 , sub2 + 1).equals(" "))
sub2++;
input = input.substring(0 , sub1) + arith(input.substring(sub1 , sub2)) + input.substring(sub2);
}
return Integer.parseInt(input);
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
HashMap<Integer , String> map = new HashMap<>();
String expression = "";
int cases = scan.nextInt();
for (int i = 0; i < 4; i++)
for (int j = 0; j < 4; j++)
for (int k = 0; k < 4; k++)
{
expression = build(i , j , k);
map.put(eval(expression) , expression);
}
for (int i = 0; i < cases; i++)
{
int num = scan.nextInt();
if (map.containsKey(num))
System.out.println(map.get(num) + " = " + num);
else
System.out.println("no solution");
}
scan.close();
}
}