Hỏi hướng giải của đề tính tổng tất cả các số có giá trị lớn hơn trung bình cộng của dãy cho trước

chào các bác, em mới gặp cái đề như này : Cho một mảng số nguyên a , bạn hãy tính tổng tất cả các số có giá trị lớn hơn trung bình cộng của dãy. Nếu không có số nào thỏa đề, hãy trả về -1. em đang hơi bí, bác nào cho em hướng đi với , cảm ơn !

1 Like

bạn bí phần nào?
nhập/tính trung bình cộng/so sánh/tính tổng? bạn có thể show những gì bạn có thể làm được không? ít nhất là phần nhập chứ nhỉ?

4 Likes

em tới được phần nhập :((

#include <stdio.h>

int main(){
    // nhap mang
    int s = -1;
    int a[];
    scanf("%d", a);
    // tinh tong
    for (int i = 0; i < a[], i++){
        int tong += a[i];
    }
    //tinh tbc
    int tbc = tong / sizeof(a);

    ...
    return 0;
}

em không int n vì đề nên phần tính tổng hơi sai, bác sửa giúp em

code này chạy được không nhỉ?

  1. nhập mảng (gọi size của mảng là n)
  2. tính tổng phần tử trong mảng (gọi là tong giống như trên)
  3. tính tổng các phần tử lớn hơn trung bình cộng, a[i] lớn hơn trung bình cộng nghĩa là a[i] > tong/n
    hay viết theo một cách khác là a[i]*n > tong, với cách này thì không cần đụng đến phép chia, so sánh số nguyên và số float cũng không tiện
    vậy thì cứ vòng lặp mà tính thôi
// tính kết quả
int kq = 0;
for () {
    if (a[i]*n > s) kq += a[i];
}
5 Likes

a[i]*n sẽ tràn số. Dùng epsilon được rồi.

5 Likes


lỗi này là gì vậy bác ?

:expressionless:

int a là khai báo biến số nguyên a chứ không phải là mảng a.
Mảng trong C:

3 Likes


sửa giúp em với !

Toang từ chỗ scanf ấy :smiley:
(do scanf cần thay đổi biến nên nó ko thể nhận biến đó, mà phài qua con trỏ, tức là truyền địa chỉ mới đúng, hay &)

Ngoài ra sizeof ra số byte chứ ko phải số ô. Các hàm cấp phát cũng dùng số byte.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?