您的位置:首页 > 其它

算法矩阵打印2

2016-01-24 17:03 369 查看
输入任意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");
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: