Zirveler
Coddy'nin C Journey'sinin Temeller bölümünün bir parçası. Ders 62 / 63.
Görev
Arazi haritasını temsil eden, tam sayı yükseltilerinden oluşan 2D bir ızgara veriliyor. Bir hücre, değerinin bitişik komşularının tümünden (en fazla 8: kuzey, güney, doğu, batı ve dört çapraz komşu) kesinlikle büyük olması durumunda zirve olarak adlandırılır.
Kurallar
- 8 Komşu: Kuzey, güney, doğu, batı ve dört çapraz komşunun tümünü kontrol etmelisin.
- Sınır Hücreleri: Kenarda veya köşede bulunan bir hücrenin 8’den az komşusu vardır. Hücre, mevcut komşularının tümünden kesinlikle büyükse yine bir zirvedir.
- Kesinlikle Büyük: Bir komşu mevcut hücreyle aynı yükseltiye sahipse mevcut hücre zirve değildir.
Girdi
- Satırları ve sütunları temsil eden iki tam sayı:
NveM. - Tam sayılardan oluşan bir
N*Mızgarası
Çıktı
- Toplam zirve sayısını temsil eden bir tam sayı.
- Her zirvenin koordinatları (0’dan başlayan satır ve sütun), önce satıra, ardından sütuna göre sıralanmış şekilde.
Örneğin, şu girdi 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 aşağıdaki konumlarda bulunur:
- (0,4) yükselti 4: Komşularından (3, 1, 1) daha büyüktür.
- (1,0) yükselti 5: Komşularından (1, 2, 1, 1, 1) daha büyüktür.
- (2,2) yükselti 9: Çevresindeki 8 adet 1’in tümünden daha büyüktür.
- (4,1) yükselti 3: Komşularından (2, 1, 1, 1, 1) daha büyüktür.
- (4,3) yükselti 4: Komşularından (1, 1, 1, 2, 1) daha büyüktür.
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;
}Temeller bölümündeki tüm dersler
2Değişkenler
Veri TürleriTamsayıOndalık - DoubleKarakterlerBoolean'larSabitlerprintf TemelleriDeğişken Adlandırma KurallarıTür Dönüştürme 1. BölümTür Dönüştürme 2. BölümTekrar Mücadelesi3Operatörler
Aritmetik OperatörlerModül OperatörüArtırma/AzaltmaAtama OperatörleriKarşılaştırma OperatörleriMantıksal Operatörler Bölüm 1Mantıksal Operatörler Bölüm 2Mantıksal Operatörler Bölüm 3Tekrar MücadelesiKendi başına pratik yap: Online C derleyicisi