สังเกตว่าบรรทัดที่ 1 กับ 5 จะเหมือนกันเสมอ และบรรทัดที่ 2 กับ 4 จะเหมือนกันเสมอ ดังนั้นเราจะอธิบายวิธีการสร้างเฉพาะบรรทัดที่ 1, 2, และ 3
บรรทัดที่ 1 สังเกตว่าจะมีแพทเทินคือ ..#.
, ..#.
, ..*.
, และวนไปเรื่อย ๆ ปิดท้ายด้วยตัว .
บรรทัดที่ 2 สังเกตว่าจะมีแพทเทินคือ .#.#
, .#.#
, .*.*
, และวนไปเรื่อย ๆ ปิดท้ายด้วยตัว .
บรรทัดที่ 3 สังเกตุว่าจะมีแพทเทินคือ #.O.
, #.O.
, *.O.
, *.O.
วนไปเรื่อย ๆ และจบด้วย #
หรือ *
ขึ้นอยู่กับกรณี (ว่าความยาวของอินพุตหารด้วย 3 ลงตัวหรือไม่)
เราใช้ ternary operator ในการเขียนโค้ดให้กระชับขึ้น หรือจะเขียนด้วย if-else
ก็ได้เช่นกัน
#include<bits/stdc++.h> using namespace std; int main () { string s; cin >> s; int n = s.size(); // บรรทัดที่ 1 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? "..*." : "..#."); } cout << ".\n"; // บรรทัดที่ 2 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? ".*.*" : ".#.#"); } cout << ".\n"; // บรรทัดที่ 3 for (int i = 0; i < n; i++) { if (i != 0 && i % 3 != 1) cout << "*." << s[i] << "."; else cout << "#." << s[i] << "."; } cout << (n % 3 == 0 ? "*" : "#") << "\n"; // บรรทัดที่ 4 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? ".*.*" : ".#.#"); } cout << ".\n"; // บรรทัดที่ 5 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? "..*." : "..#."); } cout << ".\n"; return 0; }
สังเกตว่าบรรทัดที่ 1 กับ 5 จะเหมือนกันเสมอ และบรรทัดที่ 2 กับ 4 จะเหมือนกันเสมอ ดังนั้นเราจะอธิบายวิธีการสร้างเฉพาะบรรทัดที่ 1, 2, และ 3
บรรทัดที่ 1 สังเกตว่าจะมีแพทเทินคือ ..#.
, ..#.
, ..*.
, และวนไปเรื่อย ๆ ปิดท้ายด้วยตัว .
บรรทัดที่ 2 สังเกตว่าจะมีแพทเทินคือ .#.#
, .#.#
, .*.*
, และวนไปเรื่อย ๆ ปิดท้ายด้วยตัว .
บรรทัดที่ 3 สังเกตุว่าจะมีแพทเทินคือ #.O.
, #.O.
, *.O.
, *.O.
วนไปเรื่อย ๆ และจบด้วย #
หรือ *
ขึ้นอยู่กับกรณี (ว่าความยาวของอินพุตหารด้วย 3 ลงตัวหรือไม่)
#include<bits/stdc++.h> using namespace std; int main () { string s; cin >> s; int n = s.size(); // บรรทัดที่ 1 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? "..*." : "..#."); } cout << ".\n"; // บรรทัดที่ 2 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? ".*.*" : ".#.#"); } cout << ".\n"; // บรรทัดที่ 3 for (int i = 0; i < n; i++) { if (i != 0 && i % 3 != 1) cout << "*." << s[i] << "."; else cout << "#." << s[i] << "."; } cout << (n % 3 == 0 ? "*" : "#") << "\n"; // บรรทัดที่ 4 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? ".*.*" : ".#.#"); } cout << ".\n"; // บรรทัดที่ 5 for (int i = 0; i < n; i++) { cout << (i % 3 == 2 ? "..*." : "..#."); } cout << ".\n"; return 0; }