溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

C語言編程題楊氏矩陣算法快速上手的方法是什么

發(fā)布時間:2021-10-23 13:59:57 來源:億速云 閱讀:132 作者:iii 欄目:開發(fā)技術(shù)

這篇文章主要介紹“C語言編程題楊氏矩陣算法快速上手的方法是什么”,在日常操作中,相信很多人在C語言編程題楊氏矩陣算法快速上手的方法是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”C語言編程題楊氏矩陣算法快速上手的方法是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

目錄
  • 題目概要

  • 一、解題思路

  • 二、具體代碼

題目概要

有一個數(shù)字矩陣,矩陣的每行從左到右都是遞增的,矩陣從上到下都是遞增的,請編寫程序在這樣的矩陣中查找某個數(shù)字是否存在?

一、解題思路

對于查找一個數(shù)組中元素是否存在,很多同學(xué)第一想法就是從頭到尾遍歷一遍。這樣的想法優(yōu)點是代碼簡單且無腦容易上手,但是這樣的缺點也很明顯,比如是m *n的數(shù)組,你從頭到尾遍歷,最壞情況要找m *n次。題目給的相關(guān)條件比如從左向右遞增,從上向下遞增你也完全沒有使用,這樣的暴力求解顯然不是我們想看到的

我們來介紹一種方法,以下列二維數(shù)組進(jìn)行舉例
1 2 3
4 5 6
7 8 9
根據(jù)矩陣的每行從左到右都是遞增這個特性,我們知道矩陣的每一行最后一個數(shù)都是該行最大的,比如上面這個矩陣的3,6,9。對于7是否在這個矩陣中,我們可以與每行的最后一個數(shù)比較,如果7小于當(dāng)前行,則在當(dāng)前行遍歷,否則進(jìn)行與下一行最后一個數(shù)的比較,如果最后一行都小于7說明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++)//判斷條件多加一個x<h-1是防止越數(shù)組訪問
	{
		;//過濾掉無用的行
	}
	if (x == h)//x==h說明所有行都不匹配
	{
		printf("該數(shù)組沒有這個數(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("請問你要查找的數(shù)是:");
	scanf("%d", &k);
	find(arr, k, 3, 3);
}

到此,關(guān)于“C語言編程題楊氏矩陣算法快速上手的方法是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI