數組 尋找數

數組行列都是非遞減
#include <stdio.h>
#include <iostream>
#include <fstream>
using namespace std;

bool Find(int *martrix, int rows, int columns, int number)
{
	int i  = 0;
	int j = 0;
	while(i < rows && i < columns)
	{
		cout<<martrix[i*columns+i]<<" "<<number<<endl;
		if(martrix[i*columns+i] < number)
			i++;
		else
			break;
	}

	if(i >= rows || i >= columns)
	{
		//看看行列哪個多出一塊, 3, 4
		if( i == rows)//4
		{
			int ii = i-1;
			int jj = i;
			while(ii >= 0 && jj < columns)
			{
				while(jj < columns)
				{
					if(martrix[ii*columns+jj] < number)
						jj++;
				}
				//所有的都小於number
				if( jj == columns)
					return false;

				if(martrix[ii*columns+jj] == number)
					return true;
				
				while(ii >=0)
				{
					if(martrix[ii*columns+jj] < number)
						ii--;
				}

				//所有的都小於number
				if(ii == -1)
					return false;

				if(martrix[ii*columns+jj] == number)
					return true;
			}
		}
		//3
		if(rows == columns && i == columns)
			cout<<"there is not exit your number"<<endl;
	}
	else
	{
		if(martrix[i*columns+i] == number)
		{
			return true;//1,2保證
		}
		else
		{
			//5.1
			for (int jj = i; jj < columns; jj++)
			{
				if(martrix[0*columns+jj] < number)
				{
					for (int ii = 0; ii < rows; ii++)
					{
						if(martrix[ii*columns+jj]== number)
							return true;
						else if(martrix[ii*columns+jj] > number)
							break;
					}
				}
				else
				{
					if(martrix[0*columns+jj] == number)
						return true;
					else
						break;
				}
			}
			//5.2
			for (int ii = i; ii < rows; ii++)
			{
				if(martrix[ii*columns+0] < number)
				{
					for (int jj = 0; jj< columns; jj++)
					{
						if(martrix[ii*columns+jj] == number)
							return true;
						else if( martrix[ii*columns+jj] > number)
							break;
					}
				}
				else
				{
					if(martrix[ii*columns+0] == number )
						return true;
					else
						break;
				}
			}
		}
	}
	return false;
}
void main()
{
	//讀取數據
	fstream file1("./data/data.txt");
	int rows;
	int columns;
	file1>>rows>>columns;
	cout<<rows<<" "<<columns<<endl;
	int *martrix = new int[rows*columns];
	for (int i  = 0; i < rows; i++)
		for(int j = 0; j < columns; j++)
		{
			file1>>martrix[ rows*i+j ];
		}
	file1.close();

	for (int i  = 0; i < rows; i++)
	{
		for(int j = 0; j < columns; j++)
		{
			cout<<martrix[ rows*i+j ]<<" ";
		}
		cout<<endl;
	}

	int numberYouWant;
	cout<<"please input number youwant to find"<<endl;
	cin>>numberYouWant;

	bool result = Find(martrix, rows, columns, numberYouWant);
	if(true == result)
	{
		cout<<"exit the number you want"<<endl;
	}
	else
	{
		cout<<"do not exit the number you want"<<endl;
	}
	return ;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章