Editorial for C++ Bài 3.D2: Đồng xu(2)


Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.

Submitting an official solution before solving the problem yourself is a bannable offence.

Lời giải chi tiết:

Đầu tiên, các bạn cần khai báo kiểu dữ liệu của số nguyên \(n, k\) dựa vào khoảng giá trị đề bài đưa \(n, k\) (\( 1 \leq n \leq 10^{5}, k \leq 10^{18}\)).

Bước 2, các bạn dùng lệnh cin để nhập số vừa khai báo ở trên.

CÁCH 1:

Bước 3, các bạn khai báo biến lưu số học viên được nhận thưởng (ban đầu bằng 0), tổng số đồng xu đã phát (ban đầu bằng 0) và số đồng xu cho bạn học viên tiếp theo (ban đầu là 1).

Bước 4, các bạn sử dụng vòng lặp while với điều kiện lặp là khi nào số học viên được nhận thưởng nhỏ hơn \(n\) và tổng số đồng xu đã phát cộng số đồng xu cho bạn học viên tiếp theo nhỏ hơn hoặc bằng k. Trong vòng lặp, các bạn thực hiện các thao tác:

  • Thêm số đồng xu cho bạn học viên tiếp theo vào tổng số đồng xu đã phát.

  • Tăng số lượng học viên được nhận thưởng lên 1 đơn vị.

  • Tăng số đồng xu cho lần phát tiếp theo lên 3 đơn vị như theo đề bài.

Bước 5, kết thúc vòng while, in ra số lượng học viên nhận được đồng xu.

CÁCH 2:

Bước 3, các bạn sử dụng công thức cấp số cộng trong dãy số. Cụ thể, các bạn tìm min giữa \(n\) và \(\frac{{1 + \sqrt{24k + 1}}}{6}\).

Bước 4, in ra giá trị các bạn tìm được.


Comments

There are no comments at the moment.