#include <stdio.h>
int main()
{
int n = 0;
scanf("%d" ,&n);
int arr[20][20] = {0};
int x = 0,y = 0;
int a = 0, b= n-1, c = n-1, d = -1;
int i = 1;
while( i <= n*n)
{
arr[x][y] = i;
i++;
if( x == a && y < b)
{
if(y == d)
{
c--;
}
y++;
}
else if( y == b && x < c)
{
if( x == a)
{
d++;
}
x++;
}
else if( x == c && y > d)
{
if(y == b)
{
a++;
}
y--;
}
else if( y == d && x >a)
{
if(x == c)
{
b--;
}
x--;
}
}
for(int r = 0; r<n ;r++)
{
for(int j = 0; j<n;j++)
{
printf("%d " ,arr[r][j]);
}
printf("\n");
}
return 0;
} #include<stdio.h>
void Return_matrix(int arr[20][20], int n)
{
int top = 0;
int bottom = n-1;
int left = 0;
int right = n-1;
int i = 0;
int j = 0;
int sum = 1;
while(sum<=n*n)
{
for(j=left;j<=right;j++)
{
arr[i][j]=sum;
sum++;
if(j==right)
break;
}
top++;
right--;
for(i=top;i<=bottom;i++)
{
arr[i][j]=sum;
sum++;
if(i==bottom)
break;
}
bottom--;
for(j=right;j>=left;j--)
{
arr[i][j]=sum;
sum++;
if(j==left)
break;
}
left++;
for(i=bottom;i>=top;i--)
{
arr[i][j]=sum;
sum++;
if(i==top)
break;
}
}
}
int main()
{
int n = 0;
int i = 0;
int j = 0;
scanf("%d",&n);
int arr[20][20]={0};
Return_matrix(arr,n);
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
} #include <stdio.h>
int main() {
int a, b,x=0,y=0,shu=1;
scanf("%d",&a);
int chan[a][a];
b=a;
for (int n=0; n<b; n++) {
chan[x][y]=shu;
y++;
shu++;
}
y--;
for (int n=0; n<a/2; n++) {
b--;
for (int j=0; j<b; j++) {
x++;
chan[x][y]=shu;
shu++;
}
for (int j=0; j<b; j++) {
y--;
chan[x][y]=shu;
shu++;
}
b--;
for (int j=0; j<b; j++) {
x--;
chan[x][y]=shu;
shu++;
}
for (int j=0; j<b; j++) {
y++;
chan[x][y]=shu;
shu++;
}
}
for (int m=0; m<a; m++) {
for (int n=0; n<a; n++) {
printf("%d ",chan[m][n]);
}
printf("\n");
}
return 0;
} #include <stdio.h>
int main() {
int n = 0;
scanf("%d", &n);
int arr[50][50];
int i = 0, j = 0;
int k = 1;
int a = n;
int b = n;
int count = 0;
int ret = 1;
if (n != 1) //偶数为奇数且不为1
{
while (2 * ret <= a)
{
while (j < n) // 0行不变,列递增至n-1列 *j变到n-1
{
arr[i][j] = k;
k++;
j++;
}
j--;
i++; //加一行,第n-1列不变,行从1~n-1 *i变到n-1
while (i < n)
{
arr[i][j] = k;
k++;
i++;
}
i--;
j--; //减一列,第n-1行不变,列从n-2~0 *j变到0
while (j >= count)
{
arr[i][j] = k;
k++;
j--;
}
j++;
i--; //减一行,第0列不变,行从n-2~1 *i变到1
while (i >= ret)
{
arr[i][j] = k;
k++;
i--;
}
i++;
j++; //从(1,1)开始 *j变到1
count++;
ret++;
n--;
}
if (b % 2 != 0)
{
arr[(b - 1) / 2][(b - 1) / 2] = k;
}
}
else //特殊n==1
{
arr[0][0] = 1;
printf("%d", arr[0][0]);
}
if (b != 1)
{
for (int u = 0; u < b; u++)
{
for (int v = 0; v < b; v++)
{
printf("%d ", arr[u][v]);
}
printf("\n");
}
}
return 0;
} #include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int left = 1, right = n, top = 1, down = n; //边界
int x = 1, y = 1; //坐标
int i;
int arr[20][20];
int directiontoleft = 0,directiontoright = 1, directionup = 0, directiondown = 0; //方向
for (i = 1; i <= n * n; i++) {
arr[x][y] = i;
if (y == top && x != right && directiontoright ==1) {
x += 1;
if (x == right) {
directiontoright = 0;
directiondown = 1;
top += 1;
}
}
else if (x == right && y != down && directiondown == 1) {
y += 1;
if (y == down) {
directiondown = 0;
directiontoleft = 1;
right -= 1;
}
}
else if (y == down && x != left && directiontoleft == 1) {
x -= 1;
if (x == left) {
directiontoleft = 0;
directionup = 1;
down -= 1;
}
}
else if (x == left && y != top && directionup == 1) {
y -= 1;
if (y == top) {
directionup = 0;
directiontoright = 1;
left += 1;
}
}
}
for (int j = 1; j <= n; j++) {
for (int k = 1; k <= n; k++) {
printf("%d ", arr[k][j]);
}
printf("\n");
}
return 0;
} #include <stdio.h>
int main() {
int n,a[20][20],count=1;
scanf("%d",&n);
int col=0,row=0;//控制行和列
while(count<=n*n){
for(int i=col;i<n-col;i++)a[row][i]=count++;
for(int j=row+1;j<n-row;j++)a[j][n-col-1]=count++;
for(int i=n-col-2;i>=col;i--)a[n-row-1][i]=count++;
for(int j=n-row-2;j>row;j--)a[j][col]=count++;
col++;
row++;//以一圈为一次循环
}
for(int i=0;i<n;i++){
for(int j=0;j<n;j++)printf("%d ",a[i][j]);
printf("\n");
}
return 0;
} #include <stdio.h>
#include <stdlib.h>
void clock_Wise(int p[][19], int left, int right, int serialNum);
int main() {
int n, count = 1;
scanf("%d", &n);
int arr[19][19];
clock_Wise(arr, 0, n - 1, 1);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
}
void clock_Wise(int p[][19], int left, int right, int serialNum){
int row = left, column = left;
if(left < right){
for(; column < right; column++){
p[row][column] = serialNum++;
}
for(; row < right; row++){
p[row][column] = serialNum++;
}
for(; column > left; column--){
p[row][column] = serialNum++;
}
for(; row > left; row--){
p[row][column] = serialNum++;
}
clock_Wise(p, left + 1, right - 1, serialNum);
} else if (left == right) {
p[row][column] = serialNum;
}
} #include <stdio.h>
int main()
{
int N,n,num=1;
int a[20][20]={0};
scanf("%d",&N);
if(N%2!=0)
a[N/2][N/2]=N*N;
for(int n=0;n<N/2;n++)
{
for(int j=n;j<N-n-1;j++)
{
a[n][j]=num++;
}
for(int i=n;i<N-n-1;i++)
{
a[i][N-n-1]=num++;
}
for(int j=N-n-1;j>=n+1;j--)
{
a[N-n-1][j]=num++;
}
for(int i=N-n-1;i>=n+1;i--)
{
a[i][n]=num++;
}
}
for(int i=0;i<N;i++)
{
for(int j=0;j<N;j++)
{
printf("%5d",a[i][j]);
}
puts("\n");
}
return 0;
} #include <stdio.h>
int main()
{
int n = 0,k = 1,arr[20][20] = {0};
scanf("%d",&n);
int i = 0,i2 = 0,j = 0,j2 = 0,i3 = 0;
for(i = 1;i<=n;i++)
{
for(j = i;j<=n;j++)//从左到右
{
if(arr[i][j]==0)
arr[i][j] = k++;
else//在需要的时候停下,并记录j
{
break;
}
}
j--;//注意上面的j多走了一格
for(i2 = i+1;i2<=n;i2++)//从上到下
{
if(arr[i2][j]==0)
arr[i2][j] = k++;
else//在需要的时候停下,并记录i2
{
break;
}
}
i2--;//注意上面的i2多走了一格
for(j2 = j-1;j2>=1;j2--)//从右到左
{
if(arr[i2][j2]==0)
arr[i2][j2]=k++;
else//在需要的时候停下,并记录j2
{
break;
}
}
j2++;//注意上面的j2多走了一格
for(i3 = i2-1;i3>i;i3--)//从下到上
{
if(arr[i3][j2]==0)
arr[i3][j2] = k++;
else//在需要的时候停下,并记录i3
{
break;
}
}
i3++;//注意上面的i3多走了一格
}
for(i = 1;i<=n;i++)//输出
{
for(j = 1;j<=n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
int a = n,b = 0;//a记录第n排与个,b记录第一排与个
int flag = 1;//判断符
int arr[19][19]={0};//写成[n][n]={0}似乎更好
int x = 0,y = 0;//x,y表示坐标
for(i=1;i<=n*n;i++)//循环执行n*n次
{
if(flag == 1)//往右走
{
arr[x][y]=i;
y++;
}
else if(flag==2)//往下走
{
arr[x][y]=i;
x++;
}
else if(flag==3)//往左走
{
arr[x][y]=i;
y--;
}
else if(flag==4)//往上走
{
arr[x][y]=i;
x--;
}
//以上是反向判断,xy记录坐标
if(y==a-1&&x==b)//第一次拐弯,位置是第一排第n个
{
flag = 2;//改动判断符
}
else if(x==a-1&&y==a-1)//第2次,位置是第n排第n个
{
flag = 3;
}
else if(y==b&&x==a-1)//第3次,位置是第n排第一个
{
flag = 4;//此时,已经完成第一圈,下一圈拐点改变
b++;//上界左界右移
a--;//下届右界左移
}
else if(x==b&&y==(b-1))//第4次拐弯,完成4次拐弯,判断符重置
{
flag = 1;
}
}
int j = 0;
for(i=0;i<n;i++)//打印出来
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
} #include <stdio.h>
int main()
{
int arr[20][20];
memset(arr, 0, sizeof(arr));
int n = 0;
int i = 0;
int count = 1;
scanf("%d", &n);
int start = 0;
int finish = n - 1;
while (count <= n * n)
{
for (i = start; i <= finish; i++)
arr[start][i] = count++;
for (i = start + 1; i <= finish; i++)
arr[i][finish] = count++;
for (i = finish - 1; i >= start; i--)
arr[finish][i] = count++;
for (i = finish - 1; i >= start + 1; i--)
arr[i][start] = count++;
start++;
finish--;
}
for (i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
printf("%d ", arr[i][j]);
}
printf("\n");
}
return 0;
} #include<stdio.h>
int main()
{
int n = 0;
scanf("%d",&n);
int i = 0;
int a = n,b = 0;//上界左界、下界右界
int flag = 1;
int arr[19][19]={0};
int x = 0,y = 0;
for(i=1;i<=n*n;i++)
{
if(flag == 1)//往右走
{
arr[x][y]=i;
y++;
}
else if(flag==2)//往下走
{
arr[x][y]=i;
x++;
}
else if(flag==3)//往左走
{
arr[x][y]=i;
y--;
}
else if(flag==4)//往上走
{
arr[x][y]=i;
x--;
}
if(y==a-1&&x==b)//碰到右界,开始往下走
{
flag = 2;
}
else if(x==a-1&&y==a-1)//碰到下界,开始往左走
{
flag = 3;
}
else if(y==b&&x==a-1)//碰到左界,开始往上走,一圈完
{
flag = 4;
b++;
a--;
}
else if(x==b&&y==(b-1))//碰到上界,开始往右走
{
flag = 1;
}
}
int j = 0;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
{
printf("%d ",arr[i][j]);
}
printf("\n");
}
return 0;
}