#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