Puncak
Termasuk bagian Dasar-Dasar dalam perjalanan C di Coddy. Pelajaran 62 dari 63.
Tantangan
Kamu diberi grid 2D berisi bilangan bulat yang menunjukkan ketinggian medan. Sebuah sel disebut puncak jika nilainya lebih besar daripada semua sel tetangganya (hingga 8 sel: utara, selatan, timur, barat, dan keempat diagonal).
Aturan
- 8 Tetangga: Kamu harus memeriksa arah utara, selatan, timur, barat, dan keempat diagonal.
- Sel Batas: Jika sebuah sel berada di tepi atau sudut, jumlah tetangganya kurang dari 8. Sel tersebut tetap merupakan puncak jika nilainya lebih besar daripada semua tetangganya yang ada.
- Lebih Besar Secara Ketat: Jika tetangga memiliki ketinggian yang sama dengan sel saat ini, sel tersebut bukan puncak.
Input
- Dua bilangan bulat
NdanMyang menunjukkan jumlah baris dan kolom. - Grid berukuran
N*Myang berisi bilangan bulat
Output
- Bilangan bulat yang menunjukkan jumlah total puncak.
- Koordinat (baris dan kolom, indeks dimulai dari 0) setiap puncak, diurutkan berdasarkan baris terlebih dahulu, lalu kolom.
Contoh untuk input ini:
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 1Berikut outputnya:
5
0 4
1 0
2 2
4 1
4 3Penjelasan Puncak berada di lokasi berikut:
- (0,4) dengan ketinggian 4: Lebih tinggi daripada tetangganya (3, 1, 1).
- (1,0) dengan ketinggian 5: Lebih tinggi daripada tetangganya (1, 2, 1, 1, 1).
- (2,2) dengan ketinggian 9: Lebih tinggi daripada semua 8 sel bernilai 1 di sekelilingnya.
- (4,1) dengan ketinggian 3: Lebih tinggi daripada tetangganya (2, 1, 1, 1, 1).
- (4,3) dengan ketinggian 4: Lebih tinggi daripada tetangganya (1, 1, 1, 2, 1).
Coba sendiri
#include <stdio.h>
#define MAXN 100
#define MAXM 100
int N, M;
int grid[MAXN][MAXM];
/**
* Mengembalikan 1 jika sel di (r, c) adalah puncak, 0 jika tidak.
* Puncak harus lebih besar daripada semua sel tetangga yang ada.
*/
int is_peak(int r, int c) {
// TODO: Tentukan posisi relatif dari 8 sel tetangga
// (Utara, Selatan, Timur, Barat, dan 4 arah diagonal).
// TODO: Periksa setiap sel tetangga dengan perulangan.
// PETUNJUK PENTING: Sebelum memeriksa grid[nr][nc], kamu HARUS memastikan
// bahwa nr dan nc berada dalam batas (0 hingga N-1 dan 0 hingga M-1).
return 1; // Penanda sementara
}
int main() {
// Baca dimensi
if (scanf("%d %d", &N, &M) != 2) {
return 1;
}
// TODO: Baca nilai grid dari stdin menggunakan perulangan bersarang.
// TODO: Periksa setiap sel (i, j) dalam grid.
// Jika is_peak(i, j) bernilai true, simpan koordinatnya.
// Kamu bisa menggunakan dua array seperti peak_r[MAXN*MAXM] dan peak_c[MAXN*MAXM]
// untuk menyimpan hasilnya sebelum mencetaknya.
// TODO: Cetak jumlah total puncak.
// TODO: Cetak setiap pasangan (row, col) yang tersimpan.
// Karena kamu menelusuri baris lalu kolom, pasangan tersebut sudah terurut!
return 0;
}Semua pelajaran di Dasar-Dasar
2Variabel
Tipe DataBilangan BulatFloat - DoubleKarakterBooleanKonstantaDasar printfAturan Penamaan VariabelKonversi Tipe Bagian 1Konversi Tipe Bagian 2Tantangan Rangkuman3Operator
Operator AritmetikaOperator ModuloInkrementasi/PenurunanOperator PenugasanOperator RelasionalOperator Logika Bagian 1Operator Logika Bagian 2Operator Logika Bagian 3Tantangan RangkumanLatihan sendiri: Compiler C online