abs()的妙用

对于一些打印对称图形的问题之前都是通过找规律构造数学关系来实现。

随着水平的提高,代码重写时想到了用abs的思路。比如:

打印如下图形
         A
        BAB
       CBABC    
      DCBABCD         
     EDCBABCDE  
        ...

这个题放在一个月前我会这样写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
int ch = 65;
for(int i = 0;i <n;i++){
for(int j = i;j >0;j--)
{
printf("%c",ch+j);
}
printf("%c",ch);
for(int k = i+1;k <=2*i;k++)
{
printf("%c",ch+k-i);
}
printf("\n");
}
```
上述代码各种起始位置结束位置的判断很头疼。

而现在我会这么写:


```C++
int ch = 65;
for(int i = 1;i <=n;i++){
int mid = (int)((2*i-1)*1.0/2);
for(int j = -mid;j<= mid;j++)
printf("%c",ch+abs(j));
printf("\n");
}
script>