สมมติว่าเราได้รับดิสก์หมุนที่มีตัวอักษรภาษาอังกฤษพิมพ์เล็กทั้ง 26 ตัว มีเครื่องพิมพ์ต่อกับดิสก์ ตัวอักษรที่อยู่ที่ตัวชี้ของดิสก์เป็นเวลา 3 วินาที จะถูกพิมพ์ออกมา ดิสก์เริ่มต้นอยู่ที่ตัวอักษร 'a' และไม่รีเซ็ตกลับตำแหน่งเริ่มต้นทุกครั้งที่พิมพ์ เราได้รับสตริง s และต้องพิมพ์สตริงที่กำหนด ทุกครั้งที่เลื่อนดิสก์ไปตัวอักษรอื่น จะนับเป็นการหมุน 1 ครั้ง เราต้องหาจำนวนการหมุนทั้งหมดที่ต้องใช้เพื่อพิมพ์สตริง s
เช่น ถ้าค่าที่ป้อนเข้าเป็น s = "elephant" ผลลัพธ์จะได้ 63
ขั้นตอนการแก้ปัญหา
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนดังนี้:
t := 'a' res := 0 สำหรับ i := 0 เมื่อ i < ขนาดของ s เพิ่ม i ทีละ 1 ทำ: res := res + min(|t - s[i]|, 26 - |t - s[i]|) t := s[i] คืนค่า res
ตัวอย่างโค้ด
ดูการนำไปใช้จริงด้านล่างเพื่อความเข้าใจที่ดียิ่งขึ้น:
#include <bits/stdc++.h> using namespace std; #define N 100 int solve(string s) { char t = 'a'; int res = 0; for(int i = 0; i < s.size(); i++){ res += min(abs(t - s[i]), 26 - abs(t - s[i])); t = s[i]; } return res; } int main() { string s = "elephant"; cout<< solve(s); return 0; }
ข้อมูลนำเข้า
"elephant"
ข้อมูลส่งออก
63