溫馨提示×

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

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

在一個(gè)二維數(shù)組中,每一行都從左到右遞增,每一列都從上到下遞增,在這樣一個(gè)數(shù)組里查找一個(gè)數(shù)

發(fā)布時(shí)間:2020-06-21 00:51:17 來(lái)源:網(wǎng)絡(luò) 閱讀:316 作者:秋笙夏笛 欄目:編程語(yǔ)言

第一種:

思路:

二維數(shù)組是從左到右遞增,從上到下遞增,row為行數(shù),col為列數(shù),a[row-1][col-1]為最大數(shù),如果剔除這一行,這一列,則最大數(shù)為a[row-2][col-2],如果要查找的num大于a[row-2][col-2]并且大于a[row-1][col-1],則在該row-1行和col-1列查找,照這樣遍歷。


這樣太麻煩,效率太低,應(yīng)當(dāng)舍棄。

#include<stdio.h>
#include<stdlib.h>
#include<assert.h>//二維數(shù)組傳參
bool find(int (*a)[7],int M,int num)
{
assert(a);
int i=M-1;
int j=6;
if(num<a[0][0]||num>a[i][6])
{
return false;
}
else
{
while((j>0)&&(i>0))
{
if(num==a[i][j])
{
return false;
}
               if(num<a[i][j]&&num<a[i-1][j-1])
  {

  int tmp=0;
  for(;tmp<j;j++)
  {
                      if(a[i][tmp]==num)
 {
 return true;
 }
  }
  tmp=0;
  for(;tmp<i;tmp++)
  {
  if(a[tmp][j]==num)
  {
  return true;
  }
  }
  return false;
  }
  else 
  {
  j--;
  i--;
  }
}
if(i==0)
{
for(int tmp=0;tmp<j;tmp++)
{
if(a[i][tmp]==num)
{
return true;
}
}
return false;
}
if(j=0)
{
for(int tmp=0;tmp<i;tmp++)
{
if(a[tmp][i]==num)
{
return true;
}
}
return false;
}
}

}
int main()
{
int a[4][7]={
{1,2,3,4,5,6,7},
{3,4,5,6,7,8,9},
{5,7,9,11,13,15,17},
{7,9,13,15,17,21,23},
};
printf("%d\n",find(a,4,1));
system("pause");
return 0;
}

第二種:

思路:實(shí)現(xiàn)比較簡(jiǎn)單,建議采用。

從右上角訪問(wèn),該數(shù)組從左到右遞增,從上到下遞增,a[0][col-1]和num比較,如果num比a[0][col-1]大,則剔除該行,row--,如果num比a[0][col]小,則剔除該列,col--;縮小查找范圍。


左下角訪問(wèn)道理一樣。

#include<stdio.h>
#include<stdlib.h>
bool find(int (*a)[7],int row,int num)
{
	int i=0;
	int col=7;
	int j=col-1;
	while(i<row&&j>=0)
	{
		if(a[i][j]==num)
		{
			return true;
		}
		else if(a[i][j]<num)
		{
			i++;
		}
		else 
		{
			j--;
		}
	}
	return false;
}
int main()
{
	int a[4][7]={
	{1,2,3,4,5,6,7},
	{3,4,5,6,7,8,9},
	{5,7,9,11,13,15,17},
	{7,10,13,15,17,21,23},
	};
	printf("%d\n",find(a,4,34));
	system("pause");
	return 0;
}


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

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

AI