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

回答編集履歴

1

コードを追加

2020/07/26 03:01

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,1 +1,33 @@
1
- `while (lo <= hi)` にしないと、要素数が 1 になったとき、その値を見ることができません。
1
+ `while (lo <= hi)` にしないと、要素数が 1 になったとき、その値を見ることができません。
2
+
3
+ **追記**
4
+ ```C
5
+ #include <stdio.h>
6
+
7
+ void search(int val)
8
+ {
9
+ int array[7] = { 1, 3, 5, 7, 9, 11, 13 };
10
+ int lo = 0, mid, hi = 6;
11
+
12
+ while (lo <= hi) { // (lo < hi) だと結果が不正
13
+ mid = (lo + hi) / 2;
14
+ if (array[mid] < val)
15
+ lo = mid + 1;
16
+ else if(array[mid] > val)
17
+ hi = mid - 1;
18
+ else {
19
+ printf("値「%d」は配列の[%d]番目で発見しました。\n", val, mid);
20
+ break;
21
+ }
22
+ }
23
+ if (lo > hi)
24
+ printf(" 値「%d」は発見できませんました。\n", val);
25
+ }
26
+
27
+ int main(void)
28
+ {
29
+ for (int val = 0; val < 15; val++)
30
+ search(val);
31
+ }
32
+ ```
33
+ あなたの修正したコードとどこが違っていますか?