题目
题目链接
题解:
题目难度:中等难度
知识点:二维数组
方法一:
由于输入行列数比较少,所以可以采用遍历整个数组,找到当前数字放入的位置。然后再找下一个数字所放位置。如下表,红色数字为该数组位置行列下标和,与对应填入的数字我们可以通过三层循环,完成数字填入:
步骤一:最外层循环:每次填入数字的下标和(0到m+n-2)
步骤二:内两层循环:由于存在下标和相同的情况,从图中可以看到,下标相同时行数越小是,所对应的填入数字越小,所以外层循环为遍历行,内层循环为遍历列。
using namespace std;
int a[10][10];
int main(){int n,m;cin>>n>>m;int c=1;for(int k=0;k<=m+n-2;k++)for(int i=0;i<n;i++) for(int j="0;j<m;j++)即可表示,从初始位置点依次找到该箭头所包含的坐标,其特点为行下标依次增加一,列下标依次减小一,直到超过数字下标范围。" if(i+j="=k)" { a[i][j]="c;" c++; } i="1;i<n;i++)表示。其内部与步骤一内部一致。" cout<<a[i][j]<<" "; cout<<endl; return 0; ``` ###方法二: 从图可以看出: 步骤一:每个箭头的初始下标(红色箭头),首先是行下标m="0,列下标遍历0-n。用一层循环for(int" 步骤二:箭头初始下标(黑色箭头),行下标遍历1-m,列下标初始值为n-1。该层循环用  #include<iostream>
using namespace std;
int a[10][10];
int main(){int n,m;cin>>n>>m;int c=1;for(int j=0;j<m;j++){ for(int i="0,k=j;" ;i++,k--){ if(i<n&&k>=0){a[i][k]=c;c++;}else break;} }for(int i=1;i<n;i++){ for(int k="i,j=m-1;" ;k++,j--){ if(k<n&&j>=0){a[k][j]=c;c++;}else break;}}for(int i=0;i</n;i++){></m;j++){></n;i++)>