线代知识:https://blog.youkuaiyun.com/qq_45716514/article/details/103434574
螺旋矩阵
#include <stdio.h>
int main(void)
{
int c=1,x=0, y=0,n, a[10][10]={0};
scanf("%d", &n);
a[x][y] = 1;
while(n*n!=c)
{
while(y+1<n && !a[x][y+1] )
a[x][++y] = ++c;
while(x+1<n && !a[x+1][y])
a[++x][y] = ++c;
while(y-1>=0 && !a[x][y-1])
a[x][--y] = ++c;
while(x-1>=0 && !a[x-1][y])
a[--x][y] = ++c;
}
for(x=0;x<n;x++)
{
for(y=0;y<n;y++)
{
printf("%3d", a[x][y]);
}
printf("\n");
}
}
对角线之和
站在数学角度看代码会有重复点,但代码执行不会有重复点。因为对于代码而言方阵中的元素只遍历了一次,不会有重复点
#include <stdio.h>
int sum(int a[10][10],int n)//求主对角线之和
{
int i,j,s=0;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
if(i==j||i+j==n-1)
s+=a[i][j];
return s;
}
int main(void)
{
int c=1,x=0, y=0,n, a[10][10]={0};
int cnt1=0,cnt2=0;
scanf("%d", &n);
a[x][y] = 1;
while(n*n!=c)
{
while(y+1<n && !a[x][y+1] )
a[x][++y] = ++c;
while(x+1<n && !a[x+1][y])
a[++x][y] = ++c;
while(y-1>=0 && !a[x][y-1])
a[x][--y] = ++c;
while(x-1>=0 && !a[x-1][y])
a[--x][y] = ++c;
}
cnt=sum(a,n);
printf("%d",cnt);
}
祝学习愉快。