#106. 数组第三题(NOIP2008矩阵中的数字)
数组第三题(NOIP2008矩阵中的数字)
第三题(NOIP2008矩阵中的数字)
有一个n×n(1≤n≤5000)的矩阵a,对于1≤i<n,1≤j≤n,a[i][j]<a[i+1][j],a[j][i]<a[j][i+1]。即矩阵中左右相邻的两个元素,右边的元素一定比左边的大;上下相邻的两个元素,下面的元素一定比上面的大。给定矩阵a中的一个数字k,找出k所在的行列(注意:输入数据保证矩阵中的数各不相同)。
#include<iostream>
using namespace std;
int n,k,answerx,answery;
int a[5001][5001];
void FindKPosition() {
int i=n,j=1;
while (j<=n) {
if (a[n][j]<k) break;
j++;
}
① ;
while (a[i][j]!=k) {
while (② ) && i>1) i--;
while (③ ) && j<=n) j++;
}
④ ;
⑤ ;
}
int main() {
int i,j;
cin>>n;
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
cin>>a[i][j];
cin>>k;
FindKPosition();
cout<<answerx<<" "<<answery<<endl;
return 0;
}
●选择题 (1)①处应填( )。 {{ select(1) }}
- j--
- j++
- i++
- i--
(2)②处应填( )。 {{ select(2) }}
- a[i][j]>k
- a[i][j]<k
- a[i][j]<=k
- a[i][j]!=k
(3)③处应填( )。 {{ select(3) }}
- a[i][j]>k
- a[i][j]<k
- a[i][j]>=k
- a[i][j]!=k
(4)④处应填( )。 {{ select(4) }}
- answerx=i+1
- answerx=i-1
- answerx=j
- answerx=i
(5)⑤处应填( )。 {{ select(5) }}
- answery=j+1
- answery=j-1
- answery=i
- answery=j