題目1384 二維陣列中的查詢

2021-06-22 13:59:10 字數 1252 閱讀 1889

時間限制:1 秒記憶體限制:32 兆特殊判題:否提交:11118解決:2207

題目描述:

在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。

輸入:輸入可能包含多個測試樣例,對於每個測試案例,

輸入的第一行為兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。

輸入的第二行包括乙個整數t(1<=t<=1000000):代表要查詢的數字。

接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。

輸出:對應每個測試案例,

輸出」yes」代表在二維陣列中找到了數字t。

輸出」no」代表在二維陣列中沒有找到數字t。

樣例輸入:

3 35

1 2 3

4 5 6

7 8 9

3 31

2 3 4

5 6 7

8 9 10

3 312

2 3 4

5 6 7

8 9 10

樣例輸出:

yesno

no以右上角那個點為起點,如果右上角的值小於所要查詢的值,那麼這個所在的行可以不用考慮(因為這個點是這行最大的,如果這行最大的值都沒所要查詢的值大,那我們所要找的值,肯定不在這一行,那麼從下一行開始找),如果右上角的值大於所要查詢的值,那麼同理這列都不用考慮了。然後,後面的重複此操作,達到邊界條件還沒找到,說明,所要找的值不在這個二維陣列裡嘍。可以利用遞迴實現,**如下。

#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

const int l=1005;

int a[l][l],m,n,value;//二維陣列,行列數及所要查詢的值

bool find(int x,int y)//當前右上角的座標

int main()

{ while(~scanf("%d%d%d",&m,&n,&value))

{for(int i=1;i<=m;i++)

for(int j=1;j<=n;j++)

scanf("%d",&a[i][j]);

if(find(1,n)) cout<<"yes"<

題目1384 二維陣列中的查詢

題目描述 在乙個二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成乙個函式,輸入這樣的乙個二維陣列和乙個整數,判斷陣列中是否含有該整數。輸入 輸入可能包含多個測試樣例,對於每個測試案例,輸入的第一行為兩個整數m和n 1 m,n 1000 代表將要輸入的矩陣的行...

題目1384 二維陣列中的查詢

include intmain if flag 1 else return0 ps 一邊輸入一邊查詢,找到後標記。乙個二重迴圈即可 後記 11 20 今天看了 劍指offer 書上的方法為將矩陣存在乙個一維陣列當中,然後從矩陣的右上角 或者左下角 開始查詢 bool find int matrix,...

九度 1384 二維陣列中的查詢

include include using namespace std define nmax 1000010 intarr nmax 只需要從左下角或右上角開始查詢,即可。當是從右上角開始查詢時,左上角 row 0,column columns 1 1 若查詢的值key大於當前的值arr i 則說...