สมมติว่าเรามีสตริง S ขนาด n และตัวเลข k สตริงมีตัวอักษร 4 ประเภท พิจารณาว่ามีเซลล์บางส่วน แมลงสาบต้องการกระโดดไปถึงเป้าหมาย '.' หมายถึงเซลล์ว่าง '#' หมายถึงอุปสรรค ไม่สามารถกระโดดไปได้ 'G' หมายถึงจุดเริ่มต้นของแมลงสาบ 'T' หมายถึงเซลล์เป้าหมาย แมลงสาบกระโดดได้ทุก k เซลล์จากตำแหน่งปัจจุบัน ตรวจสอบว่าแมลงสาบกระโดดถึงเป้าหมายได้หรือไม่
เช่น ถ้าอินพุตคือ S = "#G#T#"; k = 2 เอาต์พุตจะเป็น True เพราะจาก G ไป T ห่าง 2 เซลล์ และ k = 2 กระโดดถึงได้ทีเดียว
ขั้นตอนการแก้ปัญหา
n := ขนาดของ S
x := ตำแหน่ง 'G' ใน S
y := ตำแหน่ง 'T' ใน S
if x > y: swap x และ y
for i := x; i < y; i += k:
if S[i] == '#': break
if i == y: return true
otherwise: return false
ตัวอย่างโค้ด
#include <bits/stdc++.h>
using namespace std;
bool solve(string S, int k) {
int n = S.size();
int i;
int x = S.find('G');
int y = S.find('T');
if (x > y) swap(x, y);
for (i = x; i < y; i += k) {
if (S[i] == '#') break;
}
if (i == y) return true;
else return false;
}
int main() {
string S = "#G#T#";
int k = 2;
cout << solve(S, k) << endl;
}
อินพุต
"#G#T#", 2
เอาต์พุต
1