当前位置:文档之家› 矩阵问题(c语言)讲解

矩阵问题(c语言)讲解

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<=n;j++)
{ if(i+j<=n+1)
printf("%4d",j);
else
printf("%4d",n+1-i);
}
printf("\n");
}
}
4) 右上拐角 副对角线上面 i+j=n+1,a[i][j]=i
111 221
#include<stdio.h>
321
void main()
对角线下面 i>j,a[i][j]=(i-j)+1
对角线及对角线上面 i<=j
3. 拐角矩阵 1) 左上拐角
111 122 123
对角线下面 i>j,a[i][j]=j
#include<stdio.h> void main() { int i,j,k,n;
printf("n : "); scanf("%d",&n); for(i=1;i<=n;i++) {
#include<stdio.h> #define N 20 void main() { static int a[N][N];
int i=1,j=1,n,k=1; printf("n="); scanf("%d",&n); a[1][1]=k; while(k++<=25)
if(i==n) {i=j+1;j=n;a[i][j]=k;}
for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); }
} 6. 斜行矩阵
1 2 4 7 11 3 5 8 12 16 6 9 13 17 20 10 14 18 21 23 15 19 22 24 25
}
for(i=1;i<=n;i++) {for(j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); }
} 8. 杨辉三角阵
1 11 121 1331 14641
使用二维数组 include<stdio.h> #define N 20 void main() {
{ k=min(i,j,n+1-i,n+1-j); printf("%4d",k);
}
putchar('\n'); } } 5. 螺旋矩阵
1 16 15 14 13 2 17 24 23 12 3 18 25 22 11 4 19 20 21 10 56 7 8 9 拟人法:按圈行走 #include<stdio.h> #define N 20 void main() { int a[N][N]={0}; int n,s,i,j,edge; printf("n="); scanf("%d",&n); edge=n,s=1; i=j=1; do{ while(a[i][j]==0 && i<=edge) {a[i][j]=s; s++;i++;} i--;j++; while(a[i][j]==0 && j<=edge) {a[i][j]=s; s++;j++;} j--;i--; while(a[i][j]==0 && i>=n+1-edge) {a[i][j]=s; s++;i--;} i++;j--; while(a[i][j]==0 && j>=n+1-edge) {a[i][j]=s; s++;j--;} j++;i++; }while(s<=n*n); for(i=1;i<=n;i++) {for(j=1;j<=n;j++) printf("%4d",a[i][j]); printf("\n"); } }
矩阵问题
1. 给一个二维数组 A 赋值如下数据: 01111 -1 0 1 1 1 -1 -1 0 1 1 -1 -1 -1 0 1 -1 -1 -1 -1 0
对角线下面 i>j
对角线上面 i<j 对角线 i==j
2. 输出以下 5×5 的矩阵 11111 21111 32111 43211 54321
{ 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");
}
}
副对角线及其下面 i+j=n+1,a[i][j]=n+1-j
{for(j=1;j<=i;j++)
printf("%4d",a[i][j]);
printf("\n");
}
}
使用一维数组
#include<stdio.h>
#define N 20
void main()
{
static int a[N];
int i,j,n;
printf("n=");
scanf("%d",&n);
static int a[N][N]; int i,j,n; printf("n="); scanf("%d",&n); a[0][43;)
for(j=1;j<=i;j++) a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i<=n;i++)
4. 回形矩阵
11111 12221 12321 12221 11111
方法 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;
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]); printf("\n"); }
for(j=1;j<=n;j++) { k=i>j?j:i;
printf("%4d",k); } printf("\n"); } }
对角线及对角线上面 i<=j,a[i][j]=i
2) 右下拐角
321 221 111
对角线及对角线上面 i<=j,a[i][j]=n+1-j
对角线下面 i>j,a[i][j]=n+1-i #include<stdio.h>
{i=j+1;j=1;a[i][j]=k;}
else
{i--;j++;a[i][j]=k;} for(i=1;i<=n;i++)
}
}
3) 左下拐角
副对角线上面 i+j=n+1,a[i][j]=j
123 122
#include<stdio.h>
111
副对角线及其下面 i+j=n+1,a[i][j]=n+1-i
void main()
相关主题