矩阵问题
1. 给一个二维数组A赋值如下数据:
0 |
1 |
1 |
1 |
1 |
-1 |
0 |
1 |
1 |
1 |
-1 |
-1 |
0 |
1 |
1 |
-1 |
-1 |
-1 |
0 |
1 |
-1 |
-1 |
-1 |
-1 |
0 |
2. 输出以下5×5的矩阵
1 |
1 |
1 |
1 |
1 |
2 |
1 |
1 |
1 |
1 |
3 |
2 |
1 |
1 |
1 |
4 |
3 |
2 |
1 |
1 |
5 |
4 |
3 |
2 |
1 |
3. 拐角矩阵
1 |
1 |
1 |
1 |
2 |
2 |
1 |
2 |
3 |
1) 左上拐角
#include<stdio.h>
void main()
{ int i,j,k,n;
printf("n : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ k=i>j?j:i;
printf("%4d",k);
}
printf("\n");
}
}
3 |
2 |
1 |
2 |
2 |
1 |
1 |
1 |
1 |
2) 右下拐角
#include<stdio.h>
void main()
{ int i,j,k,n;
printf("n : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ if(i<=j)
printf("%4d",n+1-j);
else
printf("%4d",n+1-i);
}
printf("\n");
}
}
3) 左下拐角
1 |
2 |
3 |
1 |
2 |
2 |
1 |
1 |
1 |
#include<stdio.h>
void main()
{ int i,j,k,n;
printf("n : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ if(i+j<=n+1)
printf("%4d",j);
else
printf("%4d",n+1-i);
}
printf("\n");
}
}
1 |
1 |
1 |
2 |
2 |
1 |
3 |
2 |
1 |
4) 右上拐角
#include<stdio.h>
void main()
{ int i,j,k,n;
printf("n : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{ if(i+j<=n+1)
printf("%4d",i);
else
printf("%4d",n+1-j);
}
printf("\n");
}
}
1 |
1 |
1 |
1 |
1 |
1 |
2 |
2 |
2 |
1 |
1 |
2 |
3 |
2 |
1 |
1 |
2 |
2 |
2 |
1 |
1 |
1 |
1 |
1 |
1 |
4. 回形矩阵
方法1:四个拐角矩阵拼合而成。
方法1改进:减少判断条件。
#include<stdio.h>
main()
{ int i,j,k,n,mi,ma;
printf("n : ");
scanf("%d",&n);
for(i=1;i<=n;i++)
{ mi=i<=n+1-i?i:n+1-i;
ma=n+1-mi;
for(j=1;j<=n;j++)
{ k=j<mi?j:ma<j?n+1-j:mi;
printf("%3d",k);
}
putchar('\n');
}
}
方法2:利用对称性。
#include<stdio.h>
#define N 20
void main()
{
int a[N][N]={0},i,j,Q,n;
printf("n=");
scanf("%d",&n);
Q=n/2+1;
for(i=1;i<=Q;i++)
for(j=1;j<=Q;j++)
{if(i<=j)
a[i][j]=i;
else
a[i][j]=j;
a[i][n+1-j]=a[i][j];
a[n+1-i][j]=a[i][j];
a[n+1-i][n+1-j]=a[i][j];
}
for(i=1;i<=n;i++)
{for(j=1;j<=n;j++)
printf("%4d",a[i][j]);