九度_题目1384:二维数组中的查找

//部分答案通过,这算是最操蛋的一件事了

时间限制:1 秒内存限制:32 兆特殊判题:否提交:12959解决:2562
题目描述:
在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
输入:
输入可能包含多个测试样例,对于每个测试案例,
输入的第一行为两个整数m和n(1<=m,n<=1000):代表将要输入的矩阵的行数和列数。
输入的第二行包括一个整数t(1<=t<=1000000):代表要查找的数字。
接下来的m行,每行有n个数,代表题目所给出的m行n列的矩阵(矩阵如题目描述所示,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。
输出:
对应每个测试案例,
输出”Yes”代表在二维数组中找到了数字t。
输出”No”代表在二维数组中没有找到数字t。
样例输入:
3 3
5
1 2 3
4 5 6
7 8 9
3 3
1
2 3 4
5 6 7
8 9 10
3 3
12
2 3 4
5 6 7
8 9 10
样例输出:
Yes
No
No

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
	int row=0,col=0,num=0;
	while(cin>>row>>col)
	{
		int flag=0;
		int min=0;//to store the smaller num of row and col
		int temp=0;
		cin>>num;
		int **array=new int *[row];
		for(int i=0;i<row;i++)
		{
			array[i]=new int[col];
			for(int j=0;j<col;j++)
				scanf("%d",&array[i][j]);
		}
		if(num<array[0][0]){cout<<"No"<<endl;continue;}
		if(row<col)
			min=row;
		else
			min=col;
		for(int i=0;i<min;i++)
		{
			if(array[i][i]==num)
			{
				cout<<"Yes"<<endl;
				flag=1;
			}
			else if(array[i][i]>num||i==min-1)
			{
				temp=i;
				break;
			}
		}
		if(temp!=min-1)
		{
			int index=temp-1;
			for(int i=temp;i<col;i++)
				if(array[index][i]==num)
				{cout<<"Yes"<<endl;flag=1;}
				for(int i=0;i<temp;i++)
					if(array[temp][i]==num)
					{cout<<"Yes"<<endl;flag=1;}
		}else
		{
			if(min==row)
			{
				for(int i=min;i<col;i++)
					if(array[min-1][i]==num)
					{cout<<"Yes"<<endl;flag=1;}
			}else
			{
				for(int i=min;i<row;i++)
				{
					for(int j=0;j<col;j++)
					{
						if(array[i][j]==num)
						{cout<<"Yes"<<endl;flag=1;}
					}
				}
			}
		}
		if(!flag)
			cout<<"No"<<endl;
	}
	return 0;
}

你可能感兴趣的:(二维数组)