Chào các em,
Trong bài này, thầy Hiếu giới thiệu 1 bài tập lập trình trong đề thi tin học trẻ năm 2024 - bảng A.
Phân tích hướng giải:
- Ta để ý 1 lượt đi và về (quay về vị trí đầu tiên) sẽ có 2n - 1 bậc
- Ta xét số dư của k khi chia cho 2n - 1, gọi số dư là r.
- Nếu r < n - 1 ta dễ dàng tìm được vị trí 1 + r
- Nếu r > n - 1 ta cần tính toán bước lùi về một cách hợp lý, ở đây tùy theo tính chẵn, lẻ của số bước lùi về mà ta sẽ có công thức phù hợp.
Nhận xét: bài này chủ yếu thiên về toán, không sử dụng nhiều kỹ thuật lập trình. Dưới đây là code C++ tham khảo.
#include <bits/stdc++.h>
using namespace std;
int main ()
{
long long int n, k, vitri;
cin >> n;
cin >> k;
long long int q;
vitri = 0;
long long int r = k % (2*n - 1);
if (r < n)
{
vitri = r + 1;
}
else {
q = r - (n - 1);
if(q % 2 == 0)
{
vitri = n - q;
}else{
vitri = n - 2 - q;
}
}
cout << vitri;
return 0;
}