Tính tổng trong mảng một chiều C/C++

Anh chị mọi người giúp em bài này với ạ
E mới nhập môn nên có nhiều thứ vẫn chưa biết,mong anh chị hướng dẫn chi tiết ạ
Đề là nhập vào một mảng,tính tổng các phần tử trong mảng trước khi gặp số âm
E cảm ơn ạ

#include <stdio.h>
int main(){
	int n,i,s=0;
	scanf("%d",&n);
	int a[10000];
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
	}
	for(i=0;i<n;i++)
	{if (a[i]>=0)
		s+=a[i];
	 else
	 	printf("%d",s);
	}
	return 0;
}

Đây là code của e nhưng nó k đk tối ưu ạ

Định dạng mã của bạn lại theo hướng dẫn: http://daynhauhoc.com/t/112

Bạn muốn tối ưu? Có nghĩa là kết quả đúng rồi phải không? Ý bạn muốn tối ưu cụ thể ra sao?

1 Like

A có thể chạy thử giùm e đk k ạ?E cx chả biết nói sao nữa ạ
Chẳng là e đang học code trên web codefun.vn. Em đã chạy trên phần mềm máy và kết quả ra đúng nhưng trên web đấy lại k được đủ test ạ

Không đạt vì lý do gì? Nó không thông báo cho bạn à?

Dạ không ạ
A có thể viết code mới cho e tham khảo đk k ạ?

Bạn muốn tối ưu thì thay vì cấp phát a[10000] thì viết code hỏi người dùng cái array dài bao nhiêu rồi cấp phát như vây.

Hi Quỳnh Trang.

  1. Bạn xem phần cấp phát động.(Cấp phát động C và C++ hơi khác nhau nên chú ý ngôn ngữ mình đang dùng.)
for(i=0;i<n;i++)
{if (a[i]>=0)
s+=a[i];
else
printf("%d",s);
}

Chỗ này hình như sai yêu cầu đề bai. Bạn chạy thử code chưa ?

1 Like

bài này tôi nghĩ ở nhánh else
printf("%d",s);
thì break xong mới print

Tính tổng các phần tử trong mảng trước khi gặp số âm tức là khi gặp số âm đầu tiên thì dừng viêc tính tổng lại, return kết quả luôn lúc đấy.
Nên đoạn code dưới là sai:
else
printf("%d",s);
Vì chương trình sẽ chỉ bỏ qua số âm nhưng vẫn tính tổng cho các số dương phía sau số âm đó. Em nên break vòng for trong else thì mới đúng.

  • Để tối ưu hơn thì vừa scanf vừa tính tổng luôn cũng được nhé.
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?