Tìm số thứ k trong dãy số chẵn lẻ

Nhập vào n và k(k <= n <= 10^2). Một người tạo ra dãy S bằng cách viết lần lượt các số lẻ từ 1 đến n, sau đó viết tiếp các số chẵn từ 1 đến n. VD: Với n=5 thì S={1, 3, 5, 2, 4}. Yêu cầu bài toán là tìm số thứ k của dãy S.
INPUT: 2 số n, k.
OUTPUT: Số cần tìm.
Ví dụ;
INP: 5 4.
OUT: 2.

Mọi người có cách nào tối ưu hơn cách của e giúp e với ạ, cách của em với những số to sẽ bị chạy quá thời gian.

#include<bits/stdc++.h>
using namespace std;
int main()
{
    long long n, k, i;
    cin >> n >> k;
    long long d=0;
    for(i=1;i<=n;i+=2)
	{
		d++;
		if(d==k)
		{
            cout<< i ;
            return 0;
        }
    }
    cout<<2*(k-d);
}
1 Like

qui luật rõ ràng thế còn gì? dựa vào đó suy ra công thức toán để tính trong O(1).

7 Likes

Chỉ dùng các phép toán thông thường là ra rồi, vòng lặp làm chi cho khổ.

7 Likes
  • Gọi i là vị trí số lẻ cuối cùng
  • Nếu n chẵn: i = n/2
  • n lẻ: i = (n+1)/2
    Nếu k<= i => return 2*k - 1
    k > i => return 2 * (k-i)
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?