給定乙個單調遞增的整數序列,問某個整數是否在序列中。
第一行為乙個整數n,表示序列中整數的個數;第二行為n(n不超過10000)個整數;第三行為乙個整數m(m不超過50000),表示查詢的個數;接下來m行每行乙個整數k。
每個查詢的輸出佔一行,如果k在序列中,輸出yes,否則輸出no。
51 3 4 7 1133
69
yesnono
#include
#include
using namespace std;
int n,x;
int a[
10000];
void
search()
else
if(x) r=mid-1;
else
l=mid+1;
}if(flag)
printf
("yes\n");
else
printf
("no\n");
}int main (
)return0;
}
首先二分查詢是 乙個while迴圈,基本思路很明顯,不斷比較中間的值和目標值的大小,然後縮小範圍直至區間左值大於等於右值。
典型二分問題,在判斷是否跳出迴圈的時候同時在左右兩端進行判斷,以保證邊界點無遺漏。典型二分問題,在判斷是否跳出迴圈的時候同時在左右兩端進行判斷,以保證邊界點無遺漏。
判斷的時候用乙個flag
,在最後根據flag
的值進行輸出。
在輸入測例數目之後,用while(m--)
而不用存在陣列裡,bing!
使用printf
與scanf
。
NOJ 1001 二分查詢
2016.10.28 題目描述 1001.二分查詢 時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述 給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入 第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過500...
演算法練習 NOJ 1001 二分查詢
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50000 表示查詢的個數 接下來m行每行乙個整數k。輸出每個...
NOJ1001 演算法實驗一 二分查詢
時限 1000ms 記憶體限制 10000k 總時限 3000ms 描述給定乙個單調遞增的整數序列,問某個整數是否在序列中。輸入第一行為乙個整數n,表示序列中整數的個數 第二行為n n不超過10000 個整數 第三行為乙個整數m m不超過50000 表示查詢的個數 接下來m行每行乙個整數k。輸出每個...