算法矩阵打印2

输入任意n(1~100),程序将根据题目要求,打印矩阵:


如输入2,打印结果如下:


1 2 
4 3


如输入3,打印结果如下:


1 2 3
8 9 4
7 6 5


输入4,打印结果如下:
1   2   3   4
12  13  14  5
11  16  15  6
10  9   8   7


......


输入7打印结果如下:


1   2   3   4   5   6   7
24  25  26  27  28  29  8
23  40  41  42  43  30  9
22  39  48  49  44  31  10
21  38  47  46  45  32  11
20  37  36  35  34  33  12

19  18  17  16  15  14  13


#include<stdlib.h>
#include<stdio.h>

void fun(int n); //根据题目要求,打印n*n矩阵

int main(void)
{
	
     
    int flag = 1 ;   //标准位,判断是否继续测试代码

	while(flag)
    {   
		system("cls"); 
	    int n ;
		printf("please input the number (1~100): \n");  
	    scanf("%d",&n);    
		printf("the result is: \n");
		fun(n);	
	    printf("Whether to continue testing, yes 1   no 0  : ");
        scanf("%d" , &flag);  //是否继续检测,是 输入 1 ,否 输入 0

	
	}

 system("PAUSE");
 return 0;
}


void fun(int n)
{
    int a[100][100] = {0};   //给100*100矩阵赋初值0;
	int j = 0 ;
	int i = 0 ;
	int number = 0 ;

	for(int k = 0 ; k < n/2 ; k++)   // n/2 判断有几层内循环
	{
       number++;
	   for(j = k ; j < n-1-k ; j++)     //横向打印矩形右上角部分
	   {
	     a[i][j] = number;
		 number++;
	   }

	   for(i = k ; i < n-1-k ; i++)    //纵向打印矩形右上角部分
	   {
	      a[i][j] = number;
		  number++;
	   }
       
	   for( ; j > k ; j--)             //横向打印矩形左下角部分
	   {
	      a[i][j] = number;
		  number++;
	   }
	    
	   for( ; i > k ; i--)            //纵向打印矩形左下角部分
	   {
	      a[i][j] = number;
		  number++;
	   }

	   i++;   
	   number--;
	}

	if(n%2 == 1)                    //判断n是否为奇数,如果为真,打印中间独立元素,如果为假,跳过此语句
	{
      number++;
	  a[n/2][n/2] = number;
	}
	

	for(i = 0 ; i < n; i++)        // 依次打印 n*n 矩阵 每一个元素
	{
	  for( j = 0 ; j < n; j++)
	  {
	     printf("%d\t" , a[i][j]);
	  }
	
	  printf("\n");
	}
	
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值