矩阵填数"/>
C语言——每日一练: N*N的矩阵填数
①倒填,例如N=5 ②蛇形填数 ③回转填数
①倒填,例如N=5 (倒填比较简单)
#include <stdio.h>
#include <stdlib.h>
#define n 5
int main()
{int a[n][n];int i,j,b=n*n;for(i=0;i<n;i++){for(j=0;j<n;j++){a[i][j]=b;b--;}}for(i=0;i<n;i++){for(j=0;j<n;j++){printf("%2d ",a[i][j]);}printf("\n");}return 0;
}
运行结果
矩阵的行列为n,n=5时,输出样例:
②蛇形填数(三种填法最复杂的一种)
#include <stdio.h>
#include <stdlib.h>
#define n 8
int main()
{int a[n][n];int i,j,sum=1,k;for(i=0;i<n;i++){for(j=0;j<n;j++)a[i][j]=0;}for(k=0;;k+=2)
{//向下for(i=k;i<=k+1;i++){j=0;if(a[i][j]==0&&i<n&&j<n){a[i][j]=sum;sum++;}}//向右上for(j=0;;j++){i--;if(i<0)break;if(a[i][j]==0&&i<n&&j<n){a[i][j]=sum;sum++;}}//向右for(j=k+1;j<=k+2;j++){if(j>n-1)break;i=0;if(a[i][j]==0&&i<n&&j<n){a[i][j]=sum;sum++;}}//向左下i=0;for(j=k+2;j>=0;j--){if(i>n-1)break;if(a[i][j]==0&&i<n&&j<n){a[i][j]=sum;sum++;}i++;}if(sum==n*n+1)break;
}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%2d ",a[i][j]);printf("\n");}return 0;
}
运行结果:n=8时
③回转填数
#include <stdio.h>
#include <stdlib.h>
#define n 7
int main()
{int a[n][n];int i,j,sum=1,k;for(i=0;i<n;i++){for(j=0;j<n;j++)a[i][j]=0;}for(k=0;;k++){//向下for(i=0;i<n;i++){if(a[i][k]==0){a[i][k]=sum;sum++;}}//向右for(j=0;j<n;j++){if(a[n-k-1][j]==0){a[n-k-1][j]=sum;sum++;}}//向上for(i=n-1;i>=0;i--){if(a[i][n-1-k]==0){a[i][n-1-k]=sum;sum++;}}//向左for(j=n-1;j>=0;j--){if(a[k][j]==0){a[k][j]=sum;sum++;}}if(sum==n*n+1)break;}for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%2d ",a[i][j]);printf("\n");}return 0;
}
运行结果
//矩阵的行列为n,n=7时, 输出样例:
更多推荐
C语言——每日一练: N*N的矩阵填数
发布评论