okviri.cpp
Bài toán
Trang trí một xâu kí tự theo cách sau đây. Thông thường các kí tự sẽ được bao quanh bằng khung dấu thăng.
..#..
.#.#.
#.X.#
.#.#.
..#..
Cứ ba kí tự thì ta sẽ dùng khung dấu sao. Khung dấu sao nếu có thì luôn đặt bên trên khung dấu thăng.
..*..
.*.*.
*.X.*
.*.*.
..*..
Hãy trang trí xâu kí tự để có kết quả như ví dụ dưới đây.
Ví dụ
ABCD
Kết quả cần in ra là
..#...#...*...#..
.#.#.#.#.*.*.#.#.
#.A.#.B.*.C.*.D.#
.#.#.#.#.*.*.#.#.
..#...#...*...#..
Input: Một xâu kí tự chỉ gồm chữ in hoa và dài không quá 15 kí tự.
Output: 5 dòng thể hiện xâu sau khi được trang trí.
Code này của Nguyễn Tiến Trung Kiên
#include <stdio.h>
char s[12309];
main(){
int i;
scanf("%s", s);
printf("."); for (i=0; s[i]; i++) printf(i%3==2 ? ".*.." : ".#.."); printf("\n");
printf("."); for (i=0; s[i]; i++) printf(i%3==2 ? "*.*." : "#.#."); printf("\n");
printf("#");
for (i=0; s[i]; i++) {
printf(".%c.", s[i]);
if (i%3==1 && s[i+1]) printf("*");
else if (i%3==2) printf("*");
else printf("#");
}
printf("\n");
printf("."); for (i=0; s[i]; i++) printf(i%3==2 ? "*.*." : "#.#."); printf("\n");
printf("."); for (i=0; s[i]; i++) printf(i%3==2 ? ".*.." : ".#.."); printf("\n");
}
Các lỗi thường gặp
Wrong answer
- Do viết sai điều kiện. Điều kiện để in ra dấu * ở dòng thứ 3 phải là (i mod 3 = 1 và length(s)>i) hoặc (i mod 3 = 2). Một số bạn quên không kiểm tra điều kiện length(s)>i.