回答編集履歴

1

コードを追加

2020/07/26 03:01

投稿

kazuma-s
kazuma-s

スコア8224

test CHANGED
@@ -1 +1,65 @@
1
1
  `while (lo <= hi)` にしないと、要素数が 1 になったとき、その値を見ることができません。
2
+
3
+
4
+
5
+ **追記**
6
+
7
+ ```C
8
+
9
+ #include <stdio.h>
10
+
11
+
12
+
13
+ void search(int val)
14
+
15
+ {
16
+
17
+ int array[7] = { 1, 3, 5, 7, 9, 11, 13 };
18
+
19
+ int lo = 0, mid, hi = 6;
20
+
21
+
22
+
23
+ while (lo <= hi) { // (lo < hi) だと結果が不正
24
+
25
+ mid = (lo + hi) / 2;
26
+
27
+ if (array[mid] < val)
28
+
29
+ lo = mid + 1;
30
+
31
+ else if(array[mid] > val)
32
+
33
+ hi = mid - 1;
34
+
35
+ else {
36
+
37
+ printf("値「%d」は配列の[%d]番目で発見しました。\n", val, mid);
38
+
39
+ break;
40
+
41
+ }
42
+
43
+ }
44
+
45
+ if (lo > hi)
46
+
47
+ printf(" 値「%d」は発見できませんました。\n", val);
48
+
49
+ }
50
+
51
+
52
+
53
+ int main(void)
54
+
55
+ {
56
+
57
+ for (int val = 0; val < 15; val++)
58
+
59
+ search(val);
60
+
61
+ }
62
+
63
+ ```
64
+
65
+ あなたの修正したコードとどこが違っていますか?