回答編集履歴

5

説明の訂正

2018/05/08 02:05

投稿

退会済みユーザー
test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
 
6
6
 
7
- (ii)0行目には入力されたデータを格納し、1行目にはその**2乗の値**を格納します。
7
+ (ii)0行目には入力されたデータを格納し、1行目にはその**絶対値**を格納します。
8
8
 
9
- 2乗した値を格納した理由は(iv)に書きました。
9
+
10
10
 
11
11
  (例)入力回数 n = 3
12
12
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  3 1 -5
18
18
 
19
- 9 1 25
19
+ 3 1 5
20
20
 
21
21
  ```
22
22
 
@@ -24,13 +24,11 @@
24
24
 
25
25
 
26
26
 
27
- (iii)2乗した値の中で最小値をとります。(今回は1です。)
27
+ (iii)絶対値の中で最小値をとります。(今回は1です。)
28
28
 
29
29
 
30
30
 
31
- (iv)2乗した値の中の最小値は2乗する前の「最も0に近い整数」となっているので
32
-
33
- 2乗した値の中の最小値の配列の番号を使って求めたいものを表示します。
31
+ (iv)絶対値の中の最小値の配列の番号を使って求めたいものを表示します。
34
32
 
35
33
 
36
34
 
@@ -60,7 +58,7 @@
60
58
 
61
59
  int [][]data = new int[2][n];
62
60
 
63
- int min = 100;
61
+ int min;
64
62
 
65
63
  int []min2 = {0,0};
66
64
 
@@ -70,15 +68,15 @@
70
68
 
71
69
  data[0][i] = sc.nextInt();
72
70
 
73
- data[1][i] = data[0][i] * data[0][i];
71
+ data[1][i] = Math.abs(data[0][i]);
72
+
73
+ min = data[1][0];
74
74
 
75
75
  if(min >= data[1][i]){
76
76
 
77
- min = data[0][i];
77
+ if(data[1][i] >= 0){
78
78
 
79
- if(min >= 0){
80
-
81
- min2[0] = min;
79
+ min2[0] = data[0][i];
82
80
 
83
81
  count[0]++;
84
82
 
@@ -86,21 +84,21 @@
86
84
 
87
85
  else{
88
86
 
89
- min2[1] = min;
87
+ min2[1] = data[0][i];
90
88
 
91
89
  count[1]++;
92
90
 
93
91
  }
94
92
 
95
- min *= min;
96
-
97
93
  }
98
94
 
99
95
  }
100
96
 
101
- int flag = 0;
97
+
102
98
 
99
+ int flag = 0;
100
+
103
- for(int i = 0; i < 2; i++){ //0に最も近い整数が1つの時(正、負のどちらか片方だけある)
101
+ for(int i = 0; i < 2; i++){//0に最も近い整数が1つの時(正、負のどちらか片方だけある)
104
102
 
105
103
  if(count[i] == 0){
106
104
 
@@ -112,13 +110,11 @@
112
110
 
113
111
  }
114
112
 
115
- if(flag == 0){ //0に最も近い整数が2つの時(正、負両方あり)
113
+ if(flag == 0){//0に最も近い整数が2つの時(正、負両方あり)
116
114
 
117
115
  System.out.println(min2[0]);
118
116
 
119
117
  }
120
-
121
-
122
118
 
123
119
  }
124
120
 

4

説明の追加

2018/05/08 02:05

投稿

退会済みユーザー
test CHANGED
@@ -72,37 +72,49 @@
72
72
 
73
73
  data[1][i] = data[0][i] * data[0][i];
74
74
 
75
- if(min > data[1][i]){
75
+ if(min >= data[1][i]){
76
76
 
77
- if(data[1][i] >= 0){
77
+ min = data[0][i];
78
78
 
79
+ if(min >= 0){
80
+
79
- min2[0] = data[0][i];
81
+ min2[0] = min;
80
82
 
81
83
  count[0]++;
82
84
 
83
85
  }
84
86
 
85
- else {
87
+ else{
86
88
 
87
- min2[1] = data[0][i];
89
+ min2[1] = min;
88
90
 
89
91
  count[1]++;
90
92
 
91
93
  }
92
94
 
95
+ min *= min;
96
+
93
97
  }
94
98
 
95
99
  }
96
100
 
97
-
101
+ int flag = 0;
98
102
 
99
- for(int i = 0; i < 2; i++){
103
+ for(int i = 0; i < 2; i++){ //0に最も近い整数が1つの時(正、負のどちらか片方だけある)
100
104
 
101
- if(count[i] == 0){
105
+ if(count[i] == 0){
106
+
107
+ flag = 1;
102
108
 
103
109
  System.out.println(min2[1 - i]);
104
110
 
105
111
  }
112
+
113
+ }
114
+
115
+ if(flag == 0){ //0に最も近い整数が2つの時(正、負両方あり)
116
+
117
+ System.out.println(min2[0]);
106
118
 
107
119
  }
108
120
 

3

ソースの訂正

2018/05/07 13:44

投稿

退会済みユーザー
test CHANGED
@@ -60,9 +60,11 @@
60
60
 
61
61
  int [][]data = new int[2][n];
62
62
 
63
- int min = 10000;
63
+ int min = 100;
64
64
 
65
+ int []min2 = {0,0};
66
+
65
- int count = 0;
67
+ int []count = {0,0};
66
68
 
67
69
  for(int i = 0; i < n; i++){
68
70
 
@@ -72,41 +74,33 @@
72
74
 
73
75
  if(min > data[1][i]){
74
76
 
77
+ if(data[1][i] >= 0){
78
+
75
- min = data[1][i];
79
+ min2[0] = data[0][i];
80
+
81
+ count[0]++;
82
+
83
+ }
84
+
85
+ else {
86
+
87
+ min2[1] = data[0][i];
88
+
89
+ count[1]++;
90
+
91
+ }
76
92
 
77
93
  }
78
94
 
79
95
  }
80
96
 
81
- for(int i = 0; i < n; i++){
97
+
82
98
 
83
- if(data[1][i] == min){
99
+ for(int i = 0; i < 2; i++){
84
100
 
85
- count++;
101
+ if(count[i] == 0){
86
102
 
87
- }
88
-
89
- }
90
-
91
- for(int i = 0; i < n; i++){
92
-
93
- if(data[1][i] == min){
94
-
95
- if(count == 1){
96
-
97
- System.out.println(data[0][i]);
103
+ System.out.println(min2[1 - i]);
98
-
99
- }
100
-
101
- else{
102
-
103
- if(data[0][i] > 0){
104
-
105
- System.out.println(data[0][i]);
106
-
107
- }
108
-
109
- }
110
104
 
111
105
  }
112
106
 

2

説明の訂正

2018/05/07 13:29

投稿

退会済みユーザー
test CHANGED
@@ -140,4 +140,4 @@
140
140
 
141
141
  <出力例>
142
142
 
143
- -1
143
+ 1

1

説明の訂正

2018/05/07 13:17

投稿

退会済みユーザー
test CHANGED
@@ -38,8 +38,6 @@
38
38
 
39
39
  ということは、求めたい「最も0に近い整数」は**data[0][1]**と なっているはずです。
40
40
 
41
- 尚、最小値が複数ある場合はそれらをすべて列挙すればよいでしょう。
42
-
43
41
 
44
42
 
45
43
  私が、書いたソースコードを載せておきます。
@@ -64,6 +62,8 @@
64
62
 
65
63
  int min = 10000;
66
64
 
65
+ int count = 0;
66
+
67
67
  for(int i = 0; i < n; i++){
68
68
 
69
69
  data[0][i] = sc.nextInt();
@@ -82,7 +82,31 @@
82
82
 
83
83
  if(data[1][i] == min){
84
84
 
85
+ count++;
86
+
87
+ }
88
+
89
+ }
90
+
91
+ for(int i = 0; i < n; i++){
92
+
93
+ if(data[1][i] == min){
94
+
95
+ if(count == 1){
96
+
85
- System.out.print(data[0][i] + " ");
97
+ System.out.println(data[0][i]);
98
+
99
+ }
100
+
101
+ else{
102
+
103
+ if(data[0][i] > 0){
104
+
105
+ System.out.println(data[0][i]);
106
+
107
+ }
108
+
109
+ }
86
110
 
87
111
  }
88
112
 
@@ -116,4 +140,4 @@
116
140
 
117
141
  <出力例>
118
142
 
119
- -1 1
143
+ -1