Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โค้ด C++ ตรวจสอบแมลงสาบกระโดดถึงเป้าหมายได้หรือไม่

สมมติว่าเรามีสตริง 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