สมมติว่าเราได้รับแป้นหมุนที่มีตัวอักษรภาษาอังกฤษตัวพิมพ์เล็กทั้งหมด มีเครื่องพิมพ์ติดอยู่ที่หน้าปัด และอักขระใดก็ตามที่อยู่ในตัวชี้ของแป้นหมุนหมุนเป็นเวลา 3 วินาที จะถูกพิมพ์ออกมา ในขั้นต้นแป้นหมุนจะอยู่ที่ตัวอักษร 'a' และจะไม่รีเซ็ตเป็นตำแหน่งเริ่มต้นทุกครั้งที่พิมพ์ตัวอักษร เราได้รับสตริง s และเราต้องพิมพ์สตริงที่ให้มา เมื่อใดก็ตามที่เราเลื่อนแป้นหมุนไปยังตัวอักษรอื่น จะมีการหมุนหนึ่งครั้ง เราต้องหาจำนวนการหมุนทั้งหมดที่จำเป็นในการพิมพ์สตริง 's'
ดังนั้น หากอินพุตเป็น s ="elephant" เอาต์พุตจะเป็น 63
ขั้นตอน
เพื่อแก้ปัญหานี้ เราจะทำตามขั้นตอนเหล่านี้ -
t := 'a' res := 0 for initialize i := 0, when i < size of s, update (increase i by 1), do: res := res + minimum of (|t - s[i]|, 26 - |t - s[i]|) t := s[i] return 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