(矩阵中的数字)有一个 n×n(1≤n≤5000) 的矩阵 a,对于 1≤i<n,1≤j≤n,a[i][j]<a[i+1][j],a[i][j]<a[i][j+1]。
即矩阵中左右相邻的两个元素,右边的元素一定比左边的大。上下相邻的两个元素,下面的元素一定比上面的大。
给定矩阵 a 中的一个数字 k,找出k 所在的行列(注意:输入数据保证矩阵中的数各不相同)。(2008年提高组真题)
代码实现:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 | #include <iostream> using namespace std; int n,k,answerx,answery; int a[5001][5001]; void FindKPosition(){ int i = n,j = n; while (j > 0){ if (a[n][j] < k) break; j --; } j++; while (a[i][j] != k){ while (a[i][j]>k && i > 1) i --; while (a[i][j]<k && j <= n) j++; } answerx=i; answery=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; } |
洛谷:B2102