Zirveler
Coddy'nin C Journey'sinin Fundamentals bölümünün bir parçası — ders 62 / 63.
Görev
Bir arazi haritasını temsil eden tam sayı yüksekliklerinden oluşan 2 boyutlu bir ızgara veriliyor. Bir hücre, değeri komşu olan tüm hücrelerden (en fazla 8: kuzey, güney, doğu, batı ve dört diyagonal) kesinlikle daha büyükse zirve (peak) olarak adlandırılır.
Kurallar
- 8 Komşu: Kuzey, güney, doğu, batı ve dört diyagonalin tamamını kontrol etmelisiniz.
- Sınır Hücreleri: Bir hücre kenarda veya köşedeyse, 8'den az komşusu vardır. Eğer mevcut tüm komşularından kesinlikle daha büyükse, hala bir zirvedir.
- Kesinlikle Büyük: Eğer bir komşu mevcut hücre ile aynı yüksekliğe sahipse, mevcut hücre bir zirve değildir.
Giriş
- Satır ve sütunları temsil eden iki tam sayı
NveM. - Tam sayılardan oluşan
N*Mboyutunda bir ızgara.
Çıktı
- Toplam zirve sayısını temsil eden bir tam sayı.
- Her bir zirvenin koordinatları (satır ve sütun, 0 tabanlı), önce satıra sonra sütuna göre sıralanmış şekilde.
Örneğin bu giriş için:
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Çıktı şöyledir:
5
0 4
1 0
2 2
4 1
4 3Açıklama Zirveler şu konumlarda oluşur:
- (0,4) yüksekliği 4: Komşularından (3, 1, 1) daha büyük.
- (1,0) yüksekliği 5: Komşularından (1, 2, 1, 1, 1) daha büyük.
- (2,2) yüksekliği 9: Etrafındaki 8 adet 1'in tamamından daha büyük.
- (4,1) yüksekliği 3: Komşularından (2, 1, 1, 1, 1) daha büyük.
- (4,3) yüksekliği 4: Komşularından (1, 1, 1, 2, 1) daha büyük.
Kendin dene
#include <stdio.h>
#define MAXN 100
#define MAXM 100
int N, M;
int grid[MAXN][MAXM];
/**
* (r, c) konumundaki hücre bir zirve ise 1, aksi takdirde 0 döndürür.
* Bir zirve, mevcut tüm komşularından kesinlikle daha büyük olmalıdır.
*/
int is_peak(int r, int c) {
// TODO: 8 komşunun göreceli konumlarını tanımlayın
// (Kuzey, Güney, Doğu, Batı ve 4 diyagonal).
// TODO: Her bir komşu üzerinden döngü ile geçin.
// KRİTİK İPUCU: grid[nr][nc] değerini kontrol etmeden önce,
// nr ve nc'nin sınırlar içinde (0'dan N-1'e ve 0'dan M-1'e) olduğundan emin OLMALISINIZ.
return 1; // Yer tutucu
}
int main() {
// Boyutları oku
if (scanf("%d %d", &N, &M) != 2) {
return 1;
}
// TODO: İç içe döngüler kullanarak ızgara değerlerini stdin'den okuyun.
// TODO: Izgaradaki her bir hücre (i, j) üzerinde gezinin.
// Eğer is_peak(i, j) doğruysa, koordinatları saklayın.
// Sonuçları yazdırmadan önce saklamak için peak_r[MAXN*MAXM] ve peak_c[MAXN*MAXM]
// gibi iki dizi kullanabilirsiniz.
// TODO: Toplam zirve sayısını yazdırın.
// TODO: Saklanan her bir (satır, sütun) çiftini yazdırın.
// Önce satır sonra sütun bazlı gezindiğiniz için bunlar zaten sıralı olacaktır!
return 0;
}Fundamentals bölümündeki tüm dersler
2Değişkenler
Veri TipleriTam Sayı (Integer)Float - DoubleKarakterlerBooleanlarSabitlerprintf TemelleriDeğişken İsimlendirme KurallarıTip Dönüşümü Bölüm 1Tip Dönüşümü Bölüm 2Özet Meydan Okuması3Operatörler
Aritmetik OperatörlerModül OperatörüArtırma/AzaltmaAtama Operatörleriİlişkisel OperatörlerMantıksal Operatörler Bölüm 1Mantıksal Operatörler Bölüm 2Mantıksal Operatörler Bölüm 3Özet Meydan Okuması