15 16 22 23 25
7 14 17 21 24
6 8 13 18 20
2 5 9 12 19
1 3 4 10 11
a[1][1]=1; a[1][3]=6; a[5][1]=11; a[2][5]=16; a[4][4]=21;
a[1][2]=2; a[1][4]=7; a[4][2]=12; a[3][4]=17; a[3][5]=22;
a[2][1]=3; a[2][3]=8; a[3][3]=13; a[4][3]=18; a[4][5]=23;
a[3][1]=4; a[3][2]=9; a[2][4]=14; a[5][2]=19; a[5][4]=24;
a[2][2]=5;a[4][1]=10;a[1][5]=15; a[5][3]=20; a[5][5]=25;
在进行逆时针旋转,b[i][j]=a[j][n-i+1]
#include<stdio.h>
#include<stdlib.h>
int main()
{
int n;
scanf("%d", &n);
int a[100][100],b[100][100];//二维数组大小自定
int k = 1;
//输入下三角(后n-1个斜行)
for (int i = 1; i <= n; i++)//根据斜行的规律写算法
for (int j = 1; j <= i; j++)
{
if (i % 2 == 0)//判断是奇数斜行还是偶数斜行(将0该为一可改变蛇形数组走向)
a[j][i + 1 - j] = k;
else
a[i + 1 - j][j] = k;
k++;
}
//输入上三角(后n-1个斜行)
for (int i = n + 1; i < 2 * n; i++)
for (int j = 1; j <= 2 * n - i; j++)
{
if (i % 2 == 0)//判断是奇数斜行还是偶数斜行(将0该为一可改变蛇形数组走向)
a[i - n + j][n + 1 - j] = k;
else
a[n + 1 - j][i - n + j] = k;
k++;
}
//逆时针旋转90°
for (int i = 1; i <= n ; ++i) {
for (int j = 1; j <= n; ++j) {
b[i][j]=a[j][n-i+1];
}
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= n; j++)
printf("%-4d", b[i][j]);
printf("\n");
}
return 0;
}
#include <stdio.h>
int main() {
int a[20][20]={0},n;
scanf("%d",&n);
int up=1;
int row=n-1;
int col=0;
int num=1;
a[row][col]=num;
while (num<=n*n)
{
if (up) {
row--; col--;
}
else {
row++; col++;
}
if (row==-1) // 超过首行的位置
{
row++; col=col+2; up=1-up;
}
if (col==n) // 超过最右列的位置
{
row=row-2; col--; up=1-up;
}
if (row==n) // 超过底行的位置
{
row--; up=1-up;
}
if (col==-1) // 超过最左列的位置
{
col++; up=1-up;
}
a[row][col]=++num;
}
for (int i=0;i<n;i++) {
for (int j = 0; j < n; j++)
printf("%4d", a[i][j]);
printf("\n");
}
return 0;
}