Hướng dẫn giải của [200 đề thầy Đức] Bài 120: Hình phạt
Chỉ dùng lời giải này khi không có ý tưởng, và đừng copy-paste code từ lời giải này. Hãy tôn trọng người ra đề và người viết lời giải.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Nộp một lời giải chính thức trước khi tự giải là một hành động có thể bị ban.
Hướng dẫn giải
Nam đứng nghiêm, mỗi lần thầy hô 1 (trái) thì Nam bước sang trái 1 mét, hô 2 (phải) thì bước sang phải 1 mét. Sau n lần, tìm khoảng cách của Nam so với vị trí ban đầu.
Cách làm
Dùng biến vitri để lưu vị trí của Nam so với điểm xuất phát. Quy ước: số dương là bên phải, số âm là bên trái.
Mỗi lần đọc một số s: nếu s bằng 1 thì vitri giảm 1, còn lại (s bằng 2) thì vitri tăng 1.
Khoảng cách không phụ thuộc vào chiều đi, nên in giá trị tuyệt đối abs(vitri). Ví dụ 1 1 2 1 cho vitri = -2, in ra 2.
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
// vitri > 0 là bên phải, vitri < 0 là bên trái so với vị trí ban đầu
int vitri = 0;
for (int i = 1; i <= n; i++) {
int s;
cin >> s;
if (s == 1) {
// Thầy hô "trái" thì Nam bước sang trái 1 mét
vitri = vitri - 1;
} else {
// Thầy hô "phải" thì Nam bước sang phải 1 mét
vitri = vitri + 1;
}
}
// Khoảng cách không phụ thuộc chiều, nên lấy giá trị tuyệt đối
cout << abs(vitri) << "\n";
return 0;
}
Bình luận