If this is your first visit, be sure to
check out the FAQ by clicking the
link above. You may have to register
before you can post: click the register link above to proceed. To start viewing messages,
select the forum that you want to visit from the selection below.
Uh mình nghĩ bài này chắc phải áp dụng 1 công thức toán nào đó. Chỉ cần xét xem số vị trí ở đầu vào có thỏa mãn 1 công thức nào đó không là được. Có quy luật là nếu số đó == tổng của x số nguyên đầu tiên + 1 thì nó sẽ trả về 1, ngược lại thì trả về 0.
Ví dụ:
- 1 = 1 + 0
- 2 = 1 + 0 + 1
- 4 = 1 + 0 + 1 +2
- 7 = 1 + 0 + 1 + 2 + 3
- 11 = 1 + 0 + 1 + 2 + 3 + 4
Nhưng vấn đề là x = ?
Rất tiếc mình không giỏi Toán cho lắm. Chắc phải chờ cao nhân thôi
Vậy nếu mình viết 1 hàm kiểm tra n có phải là tổng của x số tự nhiên đầu tiên ko thì sao nhỉ. Tổng x số tự nhiên đầu tiên là x * (x + 1) / 2. Mình duyệt x để kiểm tra. Không biết cách này có được ko. thoi trang nuthoi trang tre em.
Vậy nếu mình viết 1 hàm kiểm tra n có phải là tổng của x số tự nhiên đầu tiên ko thì sao nhỉ. Tổng x số tự nhiên đầu tiên là x * (x + 1) / 2. Mình duyệt x để kiểm tra. Không biết cách này có được ko.
Được. Cách này ít tốn bộ nhớ nhưng mà duyệt 65535 lần cho một số n có giá trị (2^31) - 1 trong vòng 1.0 giây như nó yêu cầu thì ko biết nổi hay không, thử phát đi
Theo mình đã tính thì số 1 thứ i sẽ nằm tại vị trí i*(i-1)/2 + 1.
Khi có input (giả sử là t), mình tính toán ra giá trị i = sqrt((t-1) * 2) rồi sau đó tính tiếp i*(i-1)/2 + 1 để xem thử số này có bằng t hay không.
Tuy nhiên, khi submit thì bị sai ở test 3. Không biết là vì sao....
CLB ITI UIT | https://www.facebook.com/groups/ITIClub/ | https://www.facebook.com/ITIClub/ Microsoft Tech4Student | https://www.facebook.com/Tech4Student MSP Việt Nam | https://www.facebook.com/mspvn
Theo mình đã tính thì số 1 thứ i sẽ nằm tại vị trí i*(i-1)/2 + 1.
Khi có input (giả sử là t), mình tính toán ra giá trị i = sqrt((t-1) * 2) rồi sau đó tính tiếp i*(i-1)/2 + 1 để xem thử số này có bằng t hay không.
Tuy nhiên, khi submit thì bị sai ở test 3. Không biết là vì sao....
Uh thì nó sai chứ sao?
Có vẻ test thứ 3 là 1 cái test rất kinh khủng, mình thì làm theo cách dùng vòng lặp tính tổng rồi kiểm tra lại. Vẫn bị kẹt ở test thứ 3, lỗi "Hết giờ" ==> Khó lòng mà dùng vòng lặp để tính kịp được. Giờ còn việc tìm ra cái công thức đúng thôi.
function check(A : real):boolean;
begin
if frac((1+sqrt(8*A-7))/2) = 0.0 then check := true else check:=false;
end;
Hàm này mình nhặt được trong cái đống discuss của nó nè, chạy đúng, vấn đề là đâu ra? (Pascal nhé)
Uh thì nó sai chứ sao?
Có vẻ test thứ 3 là 1 cái test rất kinh khủng, mình thì làm theo cách dùng vòng lặp tính tổng rồi kiểm tra lại. Vẫn bị kẹt ở test thứ 3, lỗi "Hết giờ" ==> Khó lòng mà dùng vòng lặp để tính kịp được. Giờ còn việc tìm ra cái công thức đúng thôi.
function check(A : real):boolean;
begin
if frac((1+sqrt(8*A-7))/2) = 0.0 then check := true else check:=false;
end;
Hàm này mình nhặt được trong cái đống discuss của nó nè, chạy đúng, vấn đề là đâu ra? (Pascal nhé)
n*(n-1)/2 + 1 = A => n*n -n +2 - 2A = 0
Delta = 1 - 4(2-2A) = 8A - 7
Phương trình trên có nghiệm n = (1 + sqrt(Delta))/2. Để nghiệm này nguyên thì phần thập phân của nó phải bằng không (chính là hàm frac của Pascal)
n*(n-1)/2 + 1 = A => n*n -n +2 - 2A = 0
Delta = 1 - 4(2-2A) = 8A - 7
Phương trình trên có nghiệm n = (1 + sqrt(Delta))/2. Để nghiệm này nguyên thì phần thập phân của nó phải bằng không (chính là hàm frac của Pascal)
Cái giải phương trình bậc hai này anh có thử, sai ở test 3 (wrong answered). Dự đoán là do A = 2^31-1 mà còn *8 lên xong căn ra chắc sai số nó lớn quá
Dùng dynamic arrays và hashtable (nói cho sang chứ thật ra là vector và map đó) và đã lố giờ ở test thứ 5 =))
Ôi lâu quá rồi mình ko đụng tới C
Ủa, nó cho mình sử dụng thư viện STL hả?
:happy:SỐNG TRONG MÁI NHÀ UIT, BẠN HÃY NHỚ :happy: 1. Chấp hành pháp luật, tuân thủ nội quy; 2. Tích cực học tập, chủ động nghiên cứu 3. Đi học đúng giờ, trang phục lịch sự; 4. Nhớ xếp hàng và đừng chen lấn 5. Sống có trách nhiệm và biết sẻ chia; 6. Giữ gìn tài sản chung như tài sản của chính bạn 7. Sử dụng tài sản, thời gian hiệu quả; 8. Khiêm tốn, lễ phép, hòa nhã, thân thiện 9. Không xả rác để không nhặt rác; 10. Văn minh, lịch sự dù trên lớp học, diễn đàn hay mạng xã hội
Comment