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 !
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
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ỉ?
- nhập mảng (gọi size của mảng là n)
- tính tổng phần tử trong mảng (gọi là
tong
giống như trên) - 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
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
Toang từ chỗ scanf
ấy
(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