回答編集履歴

4

追記2

2021/12/04 10:27

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -203,3 +203,25 @@
203
203
 
204
204
 
205
205
  今回のデータでは、たまたま結果が正しくなっていました。
206
+
207
+
208
+
209
+ **追記2**
210
+
211
+ ```java
212
+
213
+ if (p != k)
214
+
215
+ for (int j = 0; j <= N; j++) {
216
+
217
+ t = m.get(k).get(j);
218
+
219
+ m.get(k).set(j, m.get(p).get(j));
220
+
221
+ m.get(p).set(j, t);
222
+
223
+ }
224
+
225
+ ```
226
+
227
+ これは、`if (p != k) java.util.Collections.swap(m, k, p);` と書き換え可能です。

3

追記

2021/12/04 10:27

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -189,3 +189,17 @@
189
189
  2.000 -1.000 3.000 1.000
190
190
 
191
191
  ```
192
+
193
+ **追記**
194
+
195
+ 上記のコードに間違いがありました。
196
+
197
+
198
+
199
+ `if (m.get(i).get(k) > t) {` を
200
+
201
+ `if (Math.abs(m.get(i).get(k)) > t) {` に修正してください。
202
+
203
+
204
+
205
+ 今回のデータでは、たまたま結果が正しくなっていました。

2

コードの修正

2021/12/04 09:51

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  for (int k = N; --k > 0; )
100
100
 
101
- for (int i = k-1; i >= 0; i--) {
101
+ for (int i = k; --i >= 0; ) {
102
102
 
103
103
  double t = m.get(i).get(k) / m.get(k).get(k);
104
104
 

1

コードの修正

2021/12/03 06:33

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -60,7 +60,7 @@
60
60
 
61
61
  int p = k;
62
62
 
63
- for (int i = k+1; i < N; i++) {
63
+ for (int i = k+1; i < N; i++)
64
64
 
65
65
  if (m.get(i).get(k) > t) {
66
66
 
@@ -70,9 +70,7 @@
70
70
 
71
71
  }
72
72
 
73
- }
74
-
75
- if (p != k) {
73
+ if (p != k)
76
74
 
77
75
  for (int j = 0; j <= N; j++) {
78
76
 
@@ -84,17 +82,13 @@
84
82
 
85
83
  }
86
84
 
87
- }
88
-
89
85
  for (int i = k+1; i < N; i++) {
90
86
 
91
87
  t = m.get(i).get(k) / m.get(k).get(k);
92
88
 
93
- for (int j = k; j <= N; j++) {
89
+ for (int j = k; j <= N; j++)
94
90
 
95
- m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
91
+ m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
96
-
97
- }
98
92
 
99
93
  }
100
94
 
@@ -102,21 +96,19 @@
102
96
 
103
97
 
104
98
 
105
- for (int k = N; --k > 0; ) {
99
+ for (int k = N; --k > 0; )
106
100
 
107
101
  for (int i = k-1; i >= 0; i--) {
108
102
 
109
103
  double t = m.get(i).get(k) / m.get(k).get(k);
110
104
 
111
- for (int j = 0; j <= N; j++) {
105
+ for (int j = 0; j <= N; j++)
112
106
 
113
107
  m.get(i).set(j, m.get(i).get(j) - t * m.get(k).get(j));
114
108
 
115
- }
116
-
117
109
  }
118
110
 
119
- }
111
+
120
112
 
121
113
  for (int k = 0; k < N; k++) {
122
114