teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

ビット処理を使うコードを追加

2020/07/17 08:55

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -96,4 +96,43 @@
96
96
  return n + 1;
97
97
  }
98
98
  }
99
+ ```
100
+ **追記2**
101
+ こんなやり方もあります。
102
+ ```Java
103
+ class Test {
104
+ public static void main(String[] args) {
105
+ int num1[] = new int[10];
106
+ int num2[] = new int[10];
107
+
108
+ int bit1 = setRandomAndBit(num1);
109
+ int bit2 = setRandomAndBit(num2);
110
+
111
+ System.out.print("配列1:"); print(num1);
112
+ System.out.print("配列2:"); print(num2);
113
+ System.out.println("共通の数: "); print2(bit1 & bit2);
114
+ System.out.println("どちらかの数: "); print2(bit1 ^ bit2);
115
+ }
116
+
117
+ static int setRandomAndBit(int[] a) {
118
+ int bit = 0;
119
+ for (int i = 0; i < 10; i++) {
120
+ a[i] = (int) (Math.random() * 10) + 1;
121
+ bit |= 1 << a[i];
122
+ }
123
+ return bit;
124
+ }
125
+
126
+ static void print(int[] a) {
127
+ for (int i = 0; i < 10; i++)
128
+ System.out.print(" " + a[i]);
129
+ System.out.println();
130
+ }
131
+
132
+ static void print2(int bit) {
133
+ for (int i = 1; i <= 10; i++)
134
+ if ((bit >> i & 1) != 0) System.out.print(" " + i);
135
+ System.out.println();
136
+ }
137
+ }
99
138
  ```

1

HashSet を使わないコードを追加

2020/07/17 08:55

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -42,4 +42,58 @@
42
42
  配列2:9 6 5 3 1 9 3 1 8 9
43
43
  共通の数: [1, 3, 5, 9]
44
44
  どちらかの数: [2, 4, 6, 8, 10]
45
+ ```
46
+ **追記**
47
+ ```Java
48
+ class Test {
49
+ public static void main(String[] args) {
50
+ int num1[] = new int[10];
51
+ int num2[] = new int[10];
52
+ int same[] = new int[10];
53
+ int side[] = new int[10];
54
+
55
+ setRandom(num1);
56
+ setRandom(num2);
57
+
58
+ int n = 0, m = 0;
59
+ for (int i = 0; i < 10; i++)
60
+ if (find(num2, num1[i]))
61
+ n = add(same, n, num1[i]);
62
+ else
63
+ m = add(side, m, num1[i]);
64
+
65
+ for (int i = 0; i < 10; i++)
66
+ if (!find(num1, num2[i]))
67
+ m = add(side, m, num2[i]);
68
+
69
+ System.out.print("配列1:"); print(num1, 10);
70
+ System.out.print("配列2:"); print(num2, 10);
71
+ System.out.print("共通の数:"); print(same, n);
72
+ System.out.print("どちらかの数:"); print(side, m);
73
+ }
74
+
75
+ static void print(int[] a, int n) {
76
+ for (int i = 0; i < n; i++)
77
+ System.out.print(" " + a[i]);
78
+ System.out.println();
79
+ }
80
+
81
+ static void setRandom(int[] a) {
82
+ for (int i = 0; i < 10; i++)
83
+ a[i] = (int) (Math.random() * 10) + 1;
84
+ }
85
+
86
+ static boolean find(int[] a, int e) {
87
+ for (int i = 0; i < 10; i++)
88
+ if (a[i] == e) return true;
89
+ return false;
90
+ }
91
+
92
+ static int add(int[] a, int n, int e) {
93
+ for (int i = 0; i < n; i++)
94
+ if (a[i] == e) return n;
95
+ a[n] = e;
96
+ return n + 1;
97
+ }
98
+ }
45
99
  ```