算法分析——魔术矩阵

 /*
 魔术矩阵问题:魔术矩阵由一个n * n (n 为奇数)的整数矩阵构成, 矩阵中的整数值是从 1 ~ n*n ,
每一行,每一列和两个对角线上数值和是一样
 考察算法的时间复杂度 , 不难发现这个程序最复杂的地方有三处,每一处由两个for循环嵌套而成,所以
每部程序的时间复杂度为O(n)* O(n) = O(n*n)整个程序的时间复杂度为O(n*n) + O(n*n) + O(n*n)
= O(n*n)
 */
 1
#include <stdio.h>
2 //#include <stdlib.h>
3 #define Max_Size 15
4
5 void main(void)
6 {
7 static int square[Max_Size][Max_Size] ;
8 int i , j , row ,column , size , count ;
9 /*
10 {
11 printf("输入矩阵大小: \n");
12 scanf("%d" , &size);
13
14 if(size < 1 || size > Max_Size + 1)
15 {
16 printf("输入矩阵太大");
17 exit(1);
18 }
19 if(!(size%2))
20 {
21 printf("大小不能为偶数");
22 exit(1)
23 }
24 }
25 */
26
27
28 while(1)
29 {
30 printf("输入矩阵大小:");
31 scanf("%d" , &size);
32
33 if((size < 1 || size > Max_Size + 1) || !(size%2))
34 {
35 printf("输入矩阵太大或者大小不能为偶数,请重新");
36 }
37 else
38 break ;
39
40 }
41 for(i = 0 ; i < size ; i ++)
42 {
43 for(j = 0 ; j < size ; j ++)
44 {
45 square[i][j] = 0 ;
46
47 square[0][(size - 1)/2] = 1 ;
48
49 i = 0 ;
50 j = (size - 1)/2;
51
52 for(count = 2 ; count <= size * size ; count++)
53 {
54 row = (i - 1 < 0)?(size - 1):(i - 1);
55 column = (j - 1 < 0)?(size - 1):(j - 1);
56
57 if(square[row][column])
58 {
59 i = (++i)%size;
60 }
61 else
62 {
63 i = row ;
64 j = (j - 1 < 0)?(size - 1): --j;
65 }
66 square[i][j] = count ;
67 }
68
69 printf("\n大小为%d的魔术矩阵为:\n" , size);
70
71 for(i = 0 ; i < size ; i++)
72 {
73 for(j = 0 ; j < size ; j++)
74 {
75 printf("%d\t" , square[i][j]);
76 }
77 printf("\n");
78 }
79 }
80 }
81 return ;
82 }


转载于:https://www.cnblogs.com/liangyan19910818/archive/2011/09/05/2168110.html

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值