#include<stdio.h>
#include<string.h>
#define N 100
int a[N][N];
int x, n, i, j, k, temp;
void menu();
void magic_Matrix();
void rotate_Matrix();
void snake_Matrix();
void Chinese_Triangle();
void print_Matrix();
int main()
{
while(1)
{
menu();
scanf("%d", &x);
switch(x)
{
case 1: printf("请输入矩阵大小: ");
scanf("%d", &n);
magic_Matrix();
break;
case 2: printf("请输入矩阵大小:");
scanf("%d", &n);
rotate_Matrix();
break;
case 3: printf("请输入矩阵大小:");
scanf("%d", &n);
snake_Matrix();
break;
case 4: printf("请输入行大小:");
scanf("%d", &n);
Chinese_Triangle();
break;
case 0: printf("\n\n结束\n\n");
return 0;
default:printf("\n输入错误,重新输入\n");
}
}
return 0;
}
void menu()
{
printf("*1.魔方矩阵\n");
printf("*2.旋转矩阵\n");
printf("*3.蛇形矩阵\n");
printf("*4.杨辉三角形\n");
printf("*0.退出\n");
printf("请输入0-4\n");
}
void magic_Matrix()
{
i=0;j=n/2;
for(k=1;k<=n*n;k++)
{
a[i][j]=k;
if(k%n)
{
i=(i-1+n)%n;
j=(j+1)%n;
}
else
i=(i+1)%n;
}
printf("输出魔方阵\n");
print_Matrix();
}
void print_Matrix()
{
if(x<4)
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d", a[i][j]);
printf("\n");
}
else
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%3d", a[i][j]);
printf("\n");
}
}
void rotate_Matrix()
{
memset(a, 0, sizeof(a));
i=0; j=0; k=a[0][0]=1;
while(k<n*n)
{
while(j+1<n && a[i][j+1]==0) a[i][++j]=++k;
while(i+1<n && a[i+1][j]==0) a[++i][j]=++k;
while(j-1>=0 && a[i][j-1]==0) a[i][--j]=++k;
while(i-1>=0 && a[i-1][j]==0) a[--i][j]=++k;
}
printf("输出旋转矩阵\n");
print_Matrix();
}
void snake_Matrix()
{
i=0; j=0; k=1;
while(k<=n*n)
{
while(i<n && j>-1) a[i++][j--]=k++;
if(j<0 && i<n)
j=0;
else
{
j=j+2;
i--;
}
while(i>-1 && j<n) a[i--][j++]=k++;
if(i<0 && j<n)
i=0;
else
{
i=i+2;
j--;
}
}
printf("输出蛇形矩阵\n");
print_Matrix();
}
void Chinese_Triangle()
{
for(i=0;i<n;i++)
a[i][0]=a[i][i]=1;
for(i=2;i<n;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("输出杨辉三角形\n");
print_Matrix();
}
#include<string.h>
#define N 100
int a[N][N];
int x, n, i, j, k, temp;
void menu();
void magic_Matrix();
void rotate_Matrix();
void snake_Matrix();
void Chinese_Triangle();
void print_Matrix();
int main()
{
while(1)
{
menu();
scanf("%d", &x);
switch(x)
{
case 1: printf("请输入矩阵大小: ");
scanf("%d", &n);
magic_Matrix();
break;
case 2: printf("请输入矩阵大小:");
scanf("%d", &n);
rotate_Matrix();
break;
case 3: printf("请输入矩阵大小:");
scanf("%d", &n);
snake_Matrix();
break;
case 4: printf("请输入行大小:");
scanf("%d", &n);
Chinese_Triangle();
break;
case 0: printf("\n\n结束\n\n");
return 0;
default:printf("\n输入错误,重新输入\n");
}
}
return 0;
}
void menu()
{
printf("*1.魔方矩阵\n");
printf("*2.旋转矩阵\n");
printf("*3.蛇形矩阵\n");
printf("*4.杨辉三角形\n");
printf("*0.退出\n");
printf("请输入0-4\n");
}
void magic_Matrix()
{
i=0;j=n/2;
for(k=1;k<=n*n;k++)
{
a[i][j]=k;
if(k%n)
{
i=(i-1+n)%n;
j=(j+1)%n;
}
else
i=(i+1)%n;
}
printf("输出魔方阵\n");
print_Matrix();
}
void print_Matrix()
{
if(x<4)
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
printf("%3d", a[i][j]);
printf("\n");
}
else
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf("%3d", a[i][j]);
printf("\n");
}
}
void rotate_Matrix()
{
memset(a, 0, sizeof(a));
i=0; j=0; k=a[0][0]=1;
while(k<n*n)
{
while(j+1<n && a[i][j+1]==0) a[i][++j]=++k;
while(i+1<n && a[i+1][j]==0) a[++i][j]=++k;
while(j-1>=0 && a[i][j-1]==0) a[i][--j]=++k;
while(i-1>=0 && a[i-1][j]==0) a[--i][j]=++k;
}
printf("输出旋转矩阵\n");
print_Matrix();
}
void snake_Matrix()
{
i=0; j=0; k=1;
while(k<=n*n)
{
while(i<n && j>-1) a[i++][j--]=k++;
if(j<0 && i<n)
j=0;
else
{
j=j+2;
i--;
}
while(i>-1 && j<n) a[i--][j++]=k++;
if(i<0 && j<n)
i=0;
else
{
i=i+2;
j--;
}
}
printf("输出蛇形矩阵\n");
print_Matrix();
}
void Chinese_Triangle()
{
for(i=0;i<n;i++)
a[i][0]=a[i][i]=1;
for(i=2;i<n;i++)
for(j=1;j<i;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
printf("输出杨辉三角形\n");
print_Matrix();
}