Hỏi cách giải bài tập tính S = -1 + 2 - 3 + 4 + ... + (-1)^n * n

image

Chào mấy anh chị, xin cho em hỏi cách giải bài tập trên với ạ.

Bày tập về vòng lặp. Bạn đã làm được gì rồi? Bạn nhận thấy quy luật gì từ dãy số đó chưa? Số chẵn thì sao, số lẻ thì sao?

  • Nếu bạn cần bài giải ngay, câu tra lời là không! Nếu bạn muốn học thì phải tự hiểu và làm.
  • Nếu bạn cần gợi ý, gợi ý đã có ở trên.
3 Likes

Dạ em cảm ơn anh đã giúp em, em có giải được bài tập trên nhưng mà em cảm giác như nó vẫn sai ở chỗ nào đó, có gì chưa hoàn chỉnh thì anh giúp em với ạ.

image

Bạn có cho máy chấm thử chưa, kết quả đúng là được rồi.
Bài này của bạn chỉ cần tối ưu một tí.

2 Likes

Bài này có 2 hướng giải. Hướng 1 thì tương tự như bạn đã làm rồi, bài bạn làm cơ bản ổn rồi chỉ cần sửa lại 1 chút những chỗ không cần thiết thì sẽ hoàn hảo còn không thì như hiện tại cũng ổn.
Hướng thứ 2 là dùng toán học, tính quy nạp suy ra công thức, độ phức tạp thuật toán chỉ là O(1), hướng này thì cần toán hơn là lập trình mà những bài tập cơ bản dạng như trên chủ yếu hướng đến việc tư duy và sử dụng cú pháp lệnh lặp và cấu trúc rẽ nhánh khi lập trình do đó bạn có thể nghiên cứu cách giải hoặc bỏ qua cũng được.

4 Likes

Nhóm từng cặp 2 số khởi đầu là -1 thì:
Với n chẵn :
có n/2 cặp số có tổng = 1.
=> Tổng = n/2.

Với n lẻ :
Có (n-1)/2 cặp số có tổng = 1 và thêm -n.
=> Tổng = ((n - 1)/2) - n.

if(n % 2 == 0) {
    s = n/2;
}
else {
    s = ((n-1)/2) - n;
}
2 Likes

ghê thật , khỏi tốn công chạy loop

Nếu n lẻ thì tổng sẽ là -(n/2 + 1), theo hệ bù 2 thì có thể viết một dòng:

n & 1 ? ~(n >> 1) : n >> 1

Không có if:

-(n & 1) ^ n >> 1
// nếu n chẵn thì xor 0 vẫn là chính nó
// nếu n lẻ thì xor -1 theo bù 2 là 11111...
5 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?