C:二维数组右上左下遍历
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定一个row行col列的整数数组array,要求从array[0][0]元素开始,按从左上到右下的对角线顺序遍历整个数组。
- 输入
- 输入的第一行上有两个整数,依次为row和col。
余下有row行,每行包含col个整数,构成一个二维整数数组。
(注:输入的row和col保证0 < row < 100, 0 < col < 100) - 输出
- 按遍历顺序输出每个整数。每个整数占一行。
- 样例输入
-
3 4 1 2 4 7 3 5 8 10 6 9 11 12
- 样例输出
-
1 2 3 4 5 6 7 8 9 10 11 12
#include <iostream> #include <stdio.h> #include <string> #include <ctype.h> using namespace std; int ma[101][101]; int main() { int row, col; scanf("%d%d", &row, &col); for(int i = 0; i < row; i++) { for(int j = 0; j < col; j++) { scanf("%d", &ma[i][j]); // cout << ma[i][j] << " "; } // cout << endl; } // cout << ma[0][0] << endl; for(int i = 0; i < col; i++) { int j = 0, k = i; while(k >= 0 && j < row) { cout << ma[j][k] << endl; // cout << "k "<<k<<" j "<<j<<endl; k--; j++; } } for(int j = 1; j < row; j++) { int i = col-1, k = j; while(k < row && i >=0 ) { if(k == row-1 && i == col-1) { cout << ma[k][i]; break; } else{ cout << ma[k][i] << endl; // cout << "i "<<i<<" k "<<k<<endl; k++; i--; } } } return 0; }
这个题有点坑,在写边界的限制条件时,注意要写得很完整,因为行数和列数的相对大小关系并不确定
参考:http://www.cnblogs.com/huashanqingzhu/p/3477717.html