# 12987 - Let's build a hacker script >author: Utin ###### tags: `recursion` --- ## Brief See the code below ## Solution 0 ```c= #include <stdio.h> #include <string.h> char ans[21][21], s[21], p[21]; //ans可以想成是string的陣列 int length_s, length_p; int hoho = 0; //有輸出就設成1 void f(int index_s, int index_p); int main(void) { scanf("%s", s); scanf("%s", p); length_s = strlen(s); length_p = strlen(p); f(0, 0); if (hoho == 0) printf("What the hack!?\n"); return 0; } void f(int index_s, int index_p) { if (index_p == length_p - 1) { //把剩下的全部append到ans[index_p] int k = strlen(ans[index_p]); for (int i = k; i < length_s/* - index_s*/; i++) { ans[index_p][i] = s[/*index_s + (i - k)*/i]; } /****Output****/ int invalid = 0; //檢查有無符合的結果 for (int i = 0; i < length_p; i++) { if (p[i] != '#') { if (strlen(ans[i]) > 1 || ans[i][0] != p[i]) { invalid = 1; break; } } } //若有符合的結果 if (!invalid) { int head = 0; //判斷是否為輸出第一項 for (int i = 0; i < length_p; i++) { if (p[i] == '#') { if (head == 1) printf(" "); printf("%s", ans[i]); head = 1; hoho = 1; } } printf("\n"); } /**************/ } else { for (int i = index_s; i < length_s - 1; i++) { //ans[index_p].append(s[i]) int temp1 = strlen(ans[index_p]); ans[index_p][temp1] = s[i]; //遞迴 f(i + 1, index_p + 1); //將遞迴裡面的結果還原 int temp2 = strlen(ans[index_p + 1]); for (int j = 0; j < temp2; j++) { ans[index_p + 1][j] = '\0'; } } } } // By Utin ``` ## Reference