回答編集履歴
4
bit を使用しないコードを追加
answer
CHANGED
@@ -45,4 +45,57 @@
|
|
45
45
|
```
|
46
46
|
理解できない場合は、どこが分からないのかを具体的に質問してください。
|
47
47
|
そうすれば、できるだけ説明します。
|
48
|
-
理解できた場合は、コードの説明をお願いします。
|
48
|
+
理解できた場合は、コードの説明をお願いします。
|
49
|
+
|
50
|
+
**追記**
|
51
|
+
ビット処理も HashSet も使用しないなら、
|
52
|
+
```Java
|
53
|
+
import java.util.Arrays;
|
54
|
+
|
55
|
+
class Test {
|
56
|
+
public static void main(String[] args) {
|
57
|
+
int num1[] = { 4, 9, 4, 3, 6, 8, 7, 1, 3, 10 };
|
58
|
+
int num2[] = { 7, 3, 10, 7, 5, 9, 4, 9, 9, 1 };
|
59
|
+
int same[] = new int[10];
|
60
|
+
int side[] = new int[10];
|
61
|
+
|
62
|
+
int n = 0, m = 0;
|
63
|
+
|
64
|
+
for (int i = 0; i < num1.length; i++) {
|
65
|
+
if (find(num2, num1[i])) // num2 の中に num1[i] があれば
|
66
|
+
n = add(same, n, num1[i]); // same に num1[i] を追加
|
67
|
+
m = add(side, m, num1[i]); // side に num1[i] を追加
|
68
|
+
}
|
69
|
+
|
70
|
+
for (int i = 0; i < num2.length; i++)
|
71
|
+
m = add(side, m, num2[i]); // side に num2[i] を追加
|
72
|
+
|
73
|
+
Arrays.sort(same, 0, n); // データ数 n の same をソート
|
74
|
+
Arrays.sort(side, 0, m); // データ数 m の side をソート
|
75
|
+
|
76
|
+
System.out.print("配列1:"); print(num1, num1.length);
|
77
|
+
System.out.print("配列2:"); print(num2, num2.length);
|
78
|
+
System.out.print("共通の数:"); print(same, n);
|
79
|
+
System.out.print("どちらかの数:"); print(side, m);
|
80
|
+
}
|
81
|
+
|
82
|
+
public static void print(int[] a, int n) {
|
83
|
+
for (int i = 0; i < n; i++)
|
84
|
+
System.out.print(" " + a[i]);
|
85
|
+
System.out.println();
|
86
|
+
}
|
87
|
+
|
88
|
+
public static boolean find(int[] a, int e) {
|
89
|
+
for (int i = 0; i < a.length; i++)
|
90
|
+
if (a[i] == e) return true; // 見つかれば true を返す
|
91
|
+
return false; // 見つからなかったので false を返す
|
92
|
+
}
|
93
|
+
|
94
|
+
public static int add(int[] a, int n, int e) {
|
95
|
+
for (int i = 0; i < n; i++)
|
96
|
+
if (a[i] == e) return n; // 既にあればデータ数はそのまま
|
97
|
+
a[n] = e; // 無かったので追加
|
98
|
+
return n + 1; // データ数を増やす
|
99
|
+
}
|
100
|
+
}
|
101
|
+
```
|
3
関数名を変更
answer
CHANGED
@@ -6,13 +6,13 @@
|
|
6
6
|
int num2[] = { 7, 3, 10, 7, 5, 9, 4, 9, 9, 1 };
|
7
7
|
int bit1 = setBit(num1);
|
8
8
|
int bit2 = setBit(num2);
|
9
|
-
System.out.print("配列1:");
|
9
|
+
System.out.print("配列1:"); printA(num1);
|
10
|
-
System.out.print("配列2:");
|
10
|
+
System.out.print("配列2:"); printA(num2);
|
11
|
-
System.out.print("共通の数: ");
|
11
|
+
System.out.print("共通の数: "); printB(bit1 & bit2);
|
12
|
-
System.out.print("どちらかに入っている数:");
|
12
|
+
System.out.print("どちらかに入っている数:"); printB(bit1 | bit2);
|
13
|
-
System.out.print("一方だけに入っている数:");
|
13
|
+
System.out.print("一方だけに入っている数:"); printB(bit1 ^ bit2);
|
14
|
-
System.out.print("配列1 だけに入っている数:");
|
14
|
+
System.out.print("配列1 だけに入っている数:"); printB(bit1 & ~bit2);
|
15
|
-
System.out.print("配列2 だけに入っている数:");
|
15
|
+
System.out.print("配列2 だけに入っている数:"); printB(~bit1 & bit2);
|
16
16
|
}
|
17
17
|
|
18
18
|
static int setBit(int[] a) {
|
@@ -21,12 +21,12 @@
|
|
21
21
|
return bit;
|
22
22
|
}
|
23
23
|
|
24
|
-
static void
|
24
|
+
static void printA(int[] a) { // print Array
|
25
|
-
for (int i = 0; i <
|
25
|
+
for (int i = 0; i < a.length; i++) System.out.print(" " + a[i]);
|
26
26
|
System.out.println();
|
27
27
|
}
|
28
28
|
|
29
|
-
static void
|
29
|
+
static void printB(int bit) { // print Bits
|
30
30
|
for (int i = 1; i <= 10; i++)
|
31
31
|
if ((bit >> i & 1) != 0) System.out.print(" " + i);
|
32
32
|
System.out.println();
|
2
誤字修正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
前回の
|
1
|
+
前回の回答の追記のコードの (bit1 ^ bit2) を (bit1 | bit2) にするだけなんですが。
|
2
2
|
```Java
|
3
3
|
class Test {
|
4
4
|
public static void main(String[] args) {
|
1
語句修正
answer
CHANGED
@@ -11,8 +11,8 @@
|
|
11
11
|
System.out.print("共通の数: "); print2(bit1 & bit2);
|
12
12
|
System.out.print("どちらかに入っている数:"); print2(bit1 | bit2);
|
13
13
|
System.out.print("一方だけに入っている数:"); print2(bit1 ^ bit2);
|
14
|
-
System.out.print("
|
14
|
+
System.out.print("配列1 だけに入っている数:"); print2(bit1 & ~bit2);
|
15
|
-
System.out.print("
|
15
|
+
System.out.print("配列2 だけに入っている数:"); print2(~bit1 & bit2);
|
16
16
|
}
|
17
17
|
|
18
18
|
static int setBit(int[] a) {
|
@@ -40,8 +40,8 @@
|
|
40
40
|
共通の数: 1 3 4 7 9 10
|
41
41
|
どちらかに入っている数: 1 3 4 5 6 7 8 9 10
|
42
42
|
一方だけに入っている数: 5 6 8
|
43
|
-
|
43
|
+
配列1 だけに入っている数: 6 8
|
44
|
-
|
44
|
+
配列2 だけに入っている数: 5
|
45
45
|
```
|
46
46
|
理解できない場合は、どこが分からないのかを具体的に質問してください。
|
47
47
|
そうすれば、できるだけ説明します。
|