本文主要是介绍WikiOI 1160 蛇形矩阵,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
写起来太麻烦,直接在百度搜的,
#include<stdio.h>
#include <stdlib.h>int main()
{ int i=0,j=0,n=0;scanf("%d",&n);//矩阵阶数int **p=NULL;//二维指针,存放矩阵n*n个元素p= (int**)malloc(n*sizeof(int*));//先分配n个一维指针if(NULL==p)exit(1);for (i = 0; i < n ; i++){p[i] = (int*)malloc(n*sizeof(int));//为n个一维指针分配n个整型大小的空间if (NULL==p[i])exit(1);}int flag=n;//剩下矩阵的阶数控制循环int row=0,cloumn=0;//行列标记,初始计数为0while(flag){if (flag%2)//矩阵阶数为奇数,为左下侧行列赋值{for (i=0;i<flag;i++)p[row+flag-1][cloumn+flag-1-i]=flag*flag-i;for (j=1;j<flag;j++)p[row+flag-1-j][cloumn]=p[row+flag-1][cloumn]-j;cloumn++;//拆去一行一列,影响下次循环列下标,加1}else//为偶数,为右上侧行列赋值{for (i=0;i<flag;i++)p[row][cloumn+i]=flag*flag-i;for (j=1;j<flag;j++)p[row+j][cloumn+flag-1]=p[row][cloumn+flag-1]-j;row++;//拆去一行一列,影响下次循环行下标,加1}flag--;//剩下矩阵的阶数}int sorr=0;for(i=0;i<n;i++){ for(j=0;j<n;j++){printf("%d ",p[i][j]);if(i==j || i+j+1==n)sorr+=p[i][j];}printf("\n");}printf("%d\n",sorr);for (i = 0; i < n; i++)free(p[i]);free(p);
}
这篇关于WikiOI 1160 蛇形矩阵的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!