筆試題3
#include <algorithm>
#include <cstdio>
int main() {
char s[1011];
// 輸入
while (scanf("%s", s) != EOF) {
// 規律打印圖形
int flag = 1, m = 0, n = 0, a = 0, b = 0, L = strlen(s);
for (int i = 0; i<L; ++i) {
if (s[i] == '[') {
++a;
flag = 0;
} else {
++b;
flag = 0;
}
if (a == b&&!flag) {
flag = 1;
m = std::max(m, a);
a = b = 0;
}
}
for (int i = 0; i < L; ++i) {
if (s[i] == '[') {
for (int i = 0; i < n-1; ++i) printf(" ");
if (n != 0) printf("|");
printf("+");
for (int i = 0; i < 2*(m-n)-1; ++i) printf("-");
printf("+");
if (n != 0) printf("|\n");
else printf("\n");
if (s[i + 1] == ']') {
for (int i = 0; i < n; ++i) printf(" ");
printf("|");
for (int i = 0; i < 2*(m-n)-1; ++i) printf(" ");
printf("|\n\n");
}
++n;
} else {
--n;
if (s[i - 1] == '[') {
for (int i = 0; i < n; ++i) printf(" ");
printf("|");
for (int i = 0; i < 2*(m-n)-1; ++i) printf(" ");
printf("|\n");
}
if (n != 0) {
for (int i = 0; i < n-1; ++i) printf(" ");
printf("|");
}
printf("+");
for (int i = 0; i < 2*(m-n)-1; ++i) printf("-");
printf("+");
if (n != 0) printf("|\n");
else printf("\n");
}
}
}
return 0;
}
面試題2
#include <cstdio>
#include <vector>
void quick_sort(std::vector<int> &arr, int l, int r) {
if (l < r) {
int i = l, j = r, x = arr[l];
while (i < j) {
// 從右邊向前找比x小的數
while (i < j && x < arr[j]) --j;
if (i < j) arr[i++] = arr[j];
// 從左邊向後找比x大的數
while (i < j && x > arr[i]) ++i;
if (i < j) arr[j--] = arr[i];
}
arr[i] = x;
quick_sort(arr, l, i);
quick_sort(arr, i + 1, r);
}
}
int main() {
// 輸入
std::vector<int> arr = {1,2,3,8,7,6,5};
// 快排
quick_sort(arr, 0, arr.size()-1);
// 輸出
for (auto i: arr) printf("%d", i);
}