#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
int main(int argc, char* argv[])
{
//printf("Hello World!\n");
int s[16][16];
int x,y;
int small;
int k,i,j;
int a;
char c;
while(1)
{
a = 1;
system("cls");
printf("欢迎来到“螺旋矩阵”!\n");
printf("请输入矩阵创建方式(R/r:顺时针 L/l:逆时针 其他:退出):");
c = getch();
printf("%c\n",c);
if (c!='R' && c!='r' && c!='L' && c!='l')
break;
while(1)
{
printf("请输入矩阵的长(1~16):");
scanf("%d",&x);
if(x>=1 && x<=16)
break;
printf("输入超过范围,请重新输入!\n");
}
while(1)
{
printf("请输入矩阵的高(1~16):");
scanf("%d",&y);
if(y>=1 && y<=16)
break;
printf("输入超过范围,请重新输入!\n");
}
small = (x<y)?x:y;
if(small == 1)//只有1行或1列的情况
{
for(i=0; i<y; i++)
for(j=0; j<x; j++)
s[i][j] = a++;
}
else
{
k = (small+1)/2;
if(c=='R' || c=='r')//顺时针
{
for(i=0; i<k; i++)
{
for (j=i; j<x-i-1; j++)
s[i][j] = a++;
for (j=i; j<y-i-1; j++)
s[j][x-i-1] = a++;
for (j=x-i-1; j>i; j--)
s[y-i-1][j] = a++;
for (j=y-i-1; j>i; j--)
s[j][i] = a++;
}
}
else if(c=='L' || c=='l')//逆时针
{
for(i=0; i<k; i++)
{
for (j=i; j<y-i-1; j++)
s[j][i] = a++;
for (j=i; j<x-i-1; j++)
s[y-i-1][j] = a++;
for (j=y-i-1; j>i; j--)
s[j][x-i-1] = a++;
for (j=x-i-1; j>i; j--)
s[i][j] = a++;
}
}
}
for (i=0; i<y; i++)
{
for (j=0; j<x; j++)
{
printf("%4d",s[i][j]);
}
printf("\n");
}
printf("输入任意键继续!\n");
getch();
}
return 0;
}