算法分析——魔术矩阵

 /*
 魔术矩阵问题:魔术矩阵由一个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

### 魔术方法概述 Python 中的魔术方法是一系列以双下划线开头和结尾的方法,这类方法在特定场景下会被 Python 解释器自动调用[^3]。通过自定义这些方法,开发者能够使自己的类具备类似于内置类型的行为。 ### 基本算术运算的实现 对于基本的数据类型如整数 `int` 而言,在执行减法操作时实际上是在背后调用了 `__sub__()` 这一魔术方法;而其他一些数据结构比如字符串或是列表则并未提供这样的机制因此无法直接参与此类运算[^1]。这意味着如果想要扩展或修改已有的行为模式,则可以通过重新定义这些特殊名称的方法来达成目的。 ### 可调用对象的支持 除了上述提到的操作外,还有诸如 `__call__()` 的存在使得实例化后的对象也能够如同普通函数那样接受参数并返回结果值[^4]。下面给出一段简单的代码片段展示如何利用这一特性: ```python class CallableExample: def __init__(self, value=0): self.value = value def __call__(self, *args, **kwargs): print(f"Called with arguments {args} and keyword arguments {kwargs}") return sum(args) + self.value callable_obj = CallableExample(5) result = callable_obj(1, 2, three='three') print(result) ``` 这段程序会输出如下内容: ``` Called with arguments (1, 2) and keyword arguments {'three': 'three'} 8 ``` 这里展示了怎样创建一个具有可调用能力的对象,并且可以在实际应用中传递任意数量的位置参数以及关键字参数给它处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值