1.题目
2.思路
3.代码的实现
#include <iostream>
using namespace std;
int main()
{
int a[11][11]= {0};
int i,j,n,k,c=1,flag=0;//flag为0表示即将向上,flag=1表示即将向下
//i代表行数,j代表列数,k代表第几斜排
cin>>n;//输入n行n列的矩阵
for(k=1; k<=n; k++) //k表示第几斜排
{
if(flag==0)//向上
{
i=k;//行等于对应的斜排数
j=1;//列为1
while(i!=0)//给向上的斜排赋值,当等于1的时候,上三角矩阵赋值完毕
{
a[i][j]=c;
c++;
i--;//行数减少1的时候
j++;//列数增加1
}
flag=1;//while循环完开始遍历向下的矩阵
}
else//斜排向下
{
i=1;//行等于1
j=k;//列等于斜排数
while(j!=0)
{
a[i][j]=c;
c++;
i++;//从某一斜下的斜排开始的时候,i增加的时候
j--;//列减少
}
flag=0;//上三角遍历完,现在开始进行下三角矩阵得遍历,,所以flag=0,下三角矩阵向上的斜排
}
}
for(k=2; k<=n; k++) //下三角矩阵
{
if(flag==0)//向上的斜排
{
i=n;//向上的斜排起始的元素,i=n;
j=k;//k从2开始
while(j!=(n+1))//向上
{
a[i][j]=c;
c++;
i--;//行数减少
j++;//列数增加
}
flag=1;//表示向下的斜排
}
else//下三角向下
{
i=k;//起始元素等于斜排数
j=n;//列数
while(i!=(n+1))
{
a[i][j]=c;
c++;
i++;
j--;
}
flag=0;
}
}
//格式化输出
for(int i=1; i<=n; i++)
{
for(int j=1; j<=n; j++)
{
if(a[i][j]<10)
{
cout<<" "<<a[i][j];//一位数 一个三个空格
}
else
{
if(a[i][j]>=10&&a[i][j]<100)
{
cout<<" "<<a[i][j];//两位数 两个空格
}
else
{
cout<<" "<<a[i][j];//三位数 一个空格
}
}
}
cout<<endl;
}
}
/*4
1 2 6 7
3 5 8 13
4 9 12 14
10 11 15 16
Process returned 0 (0x0) execution time : 1.303 s
Press any key to continue.
*/