题目描述
输入两个整数n和m,输出一个n行m列的矩阵,将数字 1 到 n*m 按照回字蛇形填充至矩阵中。
具体矩阵形式可参考样例。
输入样例
3 3
输出样例
1 2 3
8 9 4
7 6 5
算法1
(采用内外两层for循环来完成)
参考文献
柳神 博客
C++ 代码
#include <cstdio>
#include <iostream>
using namespace std;
int main(){
int m,n;
cin >> m >> n;
int a[m][n]={0};
int level = m/2 + m%2; // 层数判断,如果m为偶数,层数为m/2 ,如果m为奇数 ,层数为m/2 +1
// 所以层数level = m/2 + m%2
int k=1,s=m*n; // s表示这个蛇形矩阵最大的数 如果k比它大就代表已经填充完毕
for (int i=0;i<level;i++){
for(int j = i ; j <= n - i - 1 && k <= s; j++ ){
a[i][j] = k++;
}
for(int j = i + 1 ; j <= m - i -2 && k <= s;j++){
a[j][n-i-1] = k++;
}
for(int j = n - i - 1;j >= i && k <= s; j--){
a[m-i-1][j] = k++;
}for(int j =m-i-2 ; j >= i+1 && k <= s ;j--){
a[j][i] = k++;
}
}
for(int i=0;i<m;i++){
for(int j=0;j<n;j++){
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}