Equator
Equator
يوجد مصفوفة \(A\) تحتوي على العدد \(N\) من الأعداد الصحيحة \(A_1, A_2, \dots, A_N\).
أوجد أول موقع \(i\) بحيث يكون المجموع \(A_1 + A_2 + ... + A_i\) على الأقل نصف مجموع المصفوفة الكاملة.
Noteملحوظة
المصفوفة \(A\) مرقمة بدءًا من \(1\) (أي أن الترقيم يبدأ من \(1\)).
Tipنصيحة
عند مقارنة عددين صحيحين، إذا كان أحدهما يتضمن قسمة، يمكنك تجنب القسمة بضرب الطرف الآخر بدلًا منها.
على سبيل المثال، بدلًا من كتابة:if (running_sum >= total_sum / 2)if (running_sum * 2 >= total_sum)هذا يتجنب مشاكل التقريب ويعمل بشكل صحيح مع الأعداد الصحيحة.
Solution
قم بحلقة تكرار على المصفوفة واحسب مجموعها الكامل ولنسمه total_sum.
int n;
cin >> n;
int a[n];
int total_sum = 0;
for (int i = 0; i < n; i++) {
cin >> a[i];
total_sum += a[i];
}بعد ذلك، ابدأ حلقة أخرى ابتداءً من العنصر الأول مع إضافة قيمة كل عنصر إلى running_sum. عند إضافة كل عنصر، تحقق مما إذا كان running_sum قد وصل إلى نصف total_sum. الجواب سيكون أول موقع يحدث فيه هذا الأمر.
int running_sum = 0;
int ans;
for (int i = 0; i < n; i++) {
running_sum += a[i];
if (running_sum * 2 >= total_sum) {
ans = i + 1;
break;
}
}
cout << ans;