القمم
جزء من قسم Fundamentals في رحلة C على Coddy — الدرس 62 من 63.
التحدي
تُعطى شبكة ثنائية الأبعاد من الارتفاعات الصحيحة التي تمثل خريطة تضاريس. تُسمى الخلية peak (قمة) إذا كانت قيمتها أكبر تماماً من جميع جيرانها المتلاصقين (يصل عددهم إلى 8: الشمال، الجنوب، الشرق، الغرب، والأقطار الأربعة).
القواعد
- 8 جيران: يجب عليك التحقق من الشمال، الجنوب، الشرق، الغرب، وجميع الأقطار الأربعة.
- خلايا الحدود: إذا كانت الخلية على الحافة أو الزاوية، فسيكون لديها أقل من 8 جيران. تظل تعتبر قمة إذا كانت أكبر تماماً من جميع جيرانها الموجودين.
- أكبر تماماً: إذا كان لأحد الجيران نفس ارتفاع الخلية الحالية، فإن الخلية الحالية ليست قمة.
الإدخال
- عددان صحيحان
NوMيمثلان الصفوف والأعمدة. - شبكة
N*Mمن الأعداد الصحيحة
المخرجات
- عدد صحيح يمثل إجمالي عدد القمم.
- إحداثيات (الصف والعمود، تبدأ من 0) لكل قمة، مرتبة أولاً حسب الصف ثم حسب العمود.
على سبيل المثال لهذا الإدخال:
5 5
1 2 1 3 4
5 1 1 1 1
1 1 9 1 1
2 1 1 1 2
1 3 1 4 1هذه هي المخرجات:
5
0 4
1 0
2 2
4 1
4 3التفسير تقع القمم في المواقع التالية:
- (0,4) بارتفاع 4: أكبر من الجيران (3, 1, 1).
- (1,0) بارتفاع 5: أكبر من الجيران (1, 2, 1, 1, 1).
- (2,2) بارتفاع 9: أكبر من جميع الـ 1 الثمانية المحيطة بها.
- (4,1) بارتفاع 3: أكبر من الجيران (2, 1, 1, 1, 1).
- (4,3) بارتفاع 4: أكبر من الجيران (1, 1, 1, 2, 1).
جرّب بنفسك
#include <stdio.h>
#define MAXN 100
#define MAXM 100
int N, M;
int grid[MAXN][MAXM];
/**
* تعيد 1 إذا كانت الخلية عند (r, c) قمة، و 0 غير ذلك.
* يجب أن تكون القمة أكبر تماماً من جميع الجيران الموجودين.
*/
int is_peak(int r, int c) {
// TODO: قم بتعريف المواقع النسبية للجيران الثمانية
// (الشمال، الجنوب، الشرق، الغرب، والأقطار الأربعة).
// TODO: قم بالمرور عبر كل جار في حلقة تكرارية.
// تلميح هام: قبل التحقق من grid[nr][nc]، يجب عليك التأكد
// من أن nr و nc ضمن الحدود (من 0 إلى N-1 ومن 0 إلى M-1).
return 1; // مكان محجوز للنتيجة
}
int main() {
// قراءة الأبعاد
if (scanf("%d %d", &N, &M) != 2) {
return 1;
}
// TODO: اقرأ قيم الشبكة من stdin باستخدام حلقات متداخلة.
// TODO: قم بالمرور على كل خلية (i, j) في الشبكة.
// إذا كانت is_peak(i, j) صحيحة، قم بتخزين الإحداثيات.
// يمكنك استخدام مصفوفتين مثل peak_r[MAXN*MAXM] و peak_c[MAXN*MAXM]
// لتخزين النتائج قبل طباعتها.
// TODO: اطبع العدد الإجمالي للقمم.
// TODO: اطبع كل زوج (row, col) مخزن.
// بما أنك تمر عبر الصفوف ثم الأعمدة، فستكون النتائج مرتبة بالفعل!
return 0;
}جميع دروس Fundamentals
2المتغيرات
أنواع البياناتالأعداد الصحيحة (Integer)الأعداد العشرية (Float - Double)المحارف (Characters)القيم المنطقية (Booleans)الثوابتأساسيات printfقواعد تسمية المتغيراتتحويل الأنواع (Type Casting) - الجزء 1تحويل الأنواع (Type Casting) - الجزء 2تحدي المراجعة3المعاملات
المعاملات الحسابيةمعامل باقي القسمةالزيادة والنقصانمعاملات الإسنادالمعاملات العلائقيةالمعاملات المنطقية - الجزء الأولالمعاملات المنطقية - الجزء الثانيالمعاملات المنطقية - الجزء الثالثتحدي المراجعة