问题描述:在矩阵中心从1开始以逆时针方向绕行,逐圈扩大,直到n行n列填满数字
并输出矩阵对角线数字之和。
输入样例:
3
输出样例:
5 4 3
6 1 2
7 8 9
25
解题思路:
定义四个方向,比如我们用k来代替方向,k为0的时候右移,k为1的时候上移,k为2的时候左移,k为3的时候下移。
循环的次数为N*N-1次(起始位置我们定义好了)
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
int i,j,k;
int t=1,t1=1,t2=1,t3=1;//定义拐点
int k=0,n;//k为0的时候右移,k为1的时候上移,k为2的时候左移,k为3的时候下移。
int a[10][10];
printf("请输入矩阵的阶乘:");
cin>>n;
i=n/2;//
j=(n-1)/2;//求解起始位置的值
a[i][j]=1;//给起始位置赋初值
while(x<n*n-1)
{
if(k==0)//右移
{
a[i][j+1]=a[i][j]+1;
j++;
if((j==n-1)/2+t)//此处t的用意是用来判断蛇头从由右移到上移的拐点的访问次数,
{ //这个次数与起始的坐标之和用来作为判断条件(下同)
t++;
k=1;
}
else
{