程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 題目1384:二維數組中的查找

題目1384:二維數組中的查找

編輯:C++入門知識

今天閒來無事,看了看王道論壇上的機試題,嘗試著做了兩道,還不錯,就是好久沒做了,都沒什麼感覺了,要先找找手感!鍛煉一下! 題目描述: 在一個二維數組中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個函數,輸入這樣的一個二維數組和一個整數,判斷數組中是否含有該整數。 輸入: 輸入可能包含多個測試樣例,對於每個測試案例, 輸入的第一行為兩個整數m和n(1<=m,n<=1000):代表將要輸入的矩陣的行數和列數。 輸入的第二行包括一個整數t(1<=t<=1000000):代表要查找的數字。 接下來的m行,每行有n個數,代表題目所給出的m行n列的矩陣(矩陣如題目描述所示,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。 輸出: 對應每個測試案例, 輸出”Yes”代表在二維數組中找到了數字t。 輸出”No”代表在二維數組中沒有找到數字t。 樣例輸入: 3 351 2 34 5 67 8 93 312 3 45 6 78 9 103 3122 3 45 6 78 9 10 樣例輸出: YesNoNo 解答:其實剛拿到這個問題,想的很簡單,有以下幾個思路:             1.每行每列都是有序的數組,我們可以對每一行進行二分查找,先比速度也不會太慢;             2.按圖索骥,從一個切入點入手,開始尋找當前數字與目標數字的大小關系,之後就可以決定當前的搜索路徑按照那個方向走下去; 話不多說,提交代碼:

 
#include <iostream>  
#include <time.h>  
#include <stdlib.h>  
#include <stdio.h>  
#include <vector>  
  
using namespace std;  
  
int num[1000][1000];  
  
int main()  
{  
    int rows = 0, cols = 0;  
    vector<bool> m_flag;  
    while(scanf("%d %d\n", &rows, &cols) != EOF)  
    {  
        int target = 0;  
        scanf("%d\n",&target);  
        int i = 0,j = 0;  
        for(i=0; i<rows; i++)  
            for(j=0; j<cols; j++)  
                scanf("%d",&num[i][j]);  
          
        bool found = false;  
        int row = 0,col = cols-1;  
          
        while(row < rows && col >= 0)  
        {  
            if(num[row][col] == target)  
            {  
                found = true;  
                break;  
            }  
            else  
            {  
                if(num[row][col] > target)  
                    col--;  
                else  
                    row++;  
            }  
        }  
        /* 
        if(found == true) 
            cout << "Yes" << endl; 
        else 
            cout << "No" << endl; 
        */  
        m_flag.push_back(found);  
    }  
      
    for(size_t i=0;i<m_flag.size();i++)  
        if(m_flag[i] == true)  
            cout << "Yes" << endl;  
        else  
            cout << "No" << endl;  
    return 0;  
}  

 


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved