题目链接
题目梗概
对于类似d-h
或是4-8
(从小到大),分别看作是d到h,与4到8的简写,省略了中间的字母和数字。现在我们需要把这些简写展开扩充回来。展开方式由3个参数控制。
-
P1
P1=1时,展开字母时,填充小写字母;展开数字时,填充数字。a-d
=>abcd
;1-4
=>1234
P1=2时,展开字母时,填充大写字母;展开数字时,填充数字。a-d
=>aBCd
;1-4
=>1234
P1=3时,无论展开字母还是数字,都填充等数目的 ”*“ ;a-d
=>a**d
;1-4
=>1**4
-
P2
P2=k,表示同一个字符要连续填充k个;如,k=3时,a-d
=>abbbcccd
; -
P3
P3=1时表示正序填充;a-d
=>abcd
;
P3=2时表示逆序填充;a-d
=>acbd
;
解题思路
如果针对每一种情况单独地写一个拓展代码段,那整个程序会有些冗长。为解决这个问题,这里设置了一些通用的式子,通过调整式子中的参数来达到各种拓展方式的实现。具体如下:
- 参数P1
X_Output = W * X_Input + BA
参数W代表是否采用X_Input,如在小写转大写时,是需要原字母信息的,而对于P1=3时,要转为 * 时,则完全不需要原字母的信息。
参数B代表在输入上的增减,如在小写转大写时,要在原字母信息上减去32,在转为 * 时,则需要加上(int)(’’)。
参数A代表是否使用参数B,如对于数字而言,在转大小写时则不需要参数B,而在转为 * 时,则需要参数B。
参数\P1 | P1=1(不改变) | P1=2(小写转大写) | P1=3(转为 * ) |
---|---|---|---|
W | 1 | 1 | 0 |
B | 0 | (int)(‘a’ - ‘A’) = -32 | (int)(’*’) |
A(字母) | 1 | 1 | 1 |
A(数字) | 0 | 0 | 1 |
- 参数P3
设置参数 beg,len,iter,分别代表填充序列的起始,长度和移动方向
以a-d
为例
参数\P2 | P3=1(正序) | P3=2(逆序) |
---|---|---|
beg | a | d |
len | (int)(d-a) | (int)(d-a) |
iter | 1 | -1 |
完整代码
#include <iostream>
#