數組行列都是非遞減
#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 ;
}