C語(yǔ)言編程題楊氏矩陣算法快速上手示例詳解
題目概要
有一個(gè)數(shù)字矩陣,矩陣的每行從左到右都是遞增的,矩陣從上到下都是遞增的,請(qǐng)編寫(xiě)程序在這樣的矩陣中查找某個(gè)數(shù)字是否存在?
一、解題思路
對(duì)于查找一個(gè)數(shù)組中元素是否存在,很多同學(xué)第一想法就是從頭到尾遍歷一遍。這樣的想法優(yōu)點(diǎn)是代碼簡(jiǎn)單且無(wú)腦容易上手,但是這樣的缺點(diǎn)也很明顯,比如是m *n的數(shù)組,你從頭到尾遍歷,最壞情況要找m *n次。題目給的相關(guān)條件比如從左向右遞增,從上向下遞增你也完全沒(méi)有使用,這樣的暴力求解顯然不是我們想看到的
我們來(lái)介紹一種方法,以下列二維數(shù)組進(jìn)行舉例
1 2 3
4 5 6
7 8 9
根據(jù)矩陣的每行從左到右都是遞增這個(gè)特性,我們知道矩陣的每一行最后一個(gè)數(shù)都是該行最大的,比如上面這個(gè)矩陣的3,6,9。對(duì)于7是否在這個(gè)矩陣中,我們可以與每行的最后一個(gè)數(shù)比較,如果7小于當(dāng)前行,則在當(dāng)前行遍歷,否則進(jìn)行與下一行最后一個(gè)數(shù)的比較,如果最后一行都小于7說(shuō)明7是不在該矩陣中的
二、具體代碼
代碼如下(示例):
#include<stdio.h> void find(int arr[3][3], int k,int h,int l)//h和l分別表示行和列 { int x = 0;//第一行橫坐標(biāo) int y = l - 1;//第一行最后一列縱坐標(biāo) for (x = 0,y = l - 1;arr[x][y] < k&&x<=h-1;x++)//判斷條件多加一個(gè)x<h-1是防止越數(shù)組訪問(wèn) { ;//過(guò)濾掉無(wú)用的行 } if (x == h)//x==h說(shuō)明所有行都不匹配 { printf("該數(shù)組沒(méi)有這個(gè)數(shù)\n"); } else if(arr[x][y]>k) { int i = 0; for (i = 0;i < l;i++) { if (k == arr[x][i]) { printf("找到了,該數(shù)在第%d行,第%d列", x+1, i + 1); } } } else if (arr[x][y] == k) { printf("找到了,該數(shù)在第%d行,第%d列", x + 1, y + 1); } } int main() { int arr[3][3] = { 1,2,3,4,5,6,7,8,9 }; int k = 0; printf("請(qǐng)問(wèn)你要查找的數(shù)是:"); scanf("%d", &k); find(arr, k, 3, 3); }
以上就是C語(yǔ)言編程題楊氏矩陣算法快速上手示例詳解的詳細(xì)內(nèi)容,更多關(guān)于C語(yǔ)言編程楊氏矩陣算法的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C語(yǔ)言實(shí)現(xiàn)注冊(cè)登錄系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)注冊(cè)登錄系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-12-12C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列算法詳解
這篇文章介紹了C語(yǔ)言數(shù)據(jù)結(jié)構(gòu)之隊(duì)列的算法,文中通過(guò)示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-12-12C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式
這篇文章主要介紹了C++筆記-設(shè)置cout輸出數(shù)據(jù)的寬度和填充方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11C語(yǔ)言 常量,變量及數(shù)據(jù)詳細(xì)介紹
這篇文章主要介紹了C語(yǔ)言 常量,變量及數(shù)據(jù)詳解的相關(guān)資料,需要的朋友可以參考下2016-10-10C語(yǔ)言使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言如何使用ffmpeg實(shí)現(xiàn)單線程異步的視頻播放器功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以嘗試一下2022-12-12