环形街道房屋计数算法:利用移动和开关门操作

问题描述

假设你 berada di sebuah jalan melingkar, di depan rumah pertama. Jalan ini direpresentasikan oleh kelas Street, yang memiliki fungsi-fungsi berikut:

  • void openDoor(): Membuka pintu rumah saat ini.* void closeDoor(): Menutup pintu rumah saat ini.* boolean isDoorOpen(): Mengembalikan True jika pintu rumah saat ini terbuka, jika tidak False.* void moveRight(): Bergerak ke rumah berikutnya di sebelah kanan.* void moveLeft(): Bergerak ke rumah sebelumnya di sebelah kiri.

Tugas kamu adalah menghitung jumlah rumah di jalan ini tanpa menggunakan panjang array houses secara langsung. Kamu hanya boleh menggunakan 5 metode yang disediakan oleh kelas Street di atas.

思路

  1. Inisialisasi penghitung count untuk merekam jumlah rumah yang telah dilewati, nilainya awal adalah 0.2. Gunakan perulangan, pertama-tama bergerak ke kanan sebanyak k langkah, lalu buka pintu rumah saat ini. Jika pintu sudah terbuka, tambahkan 1 ke count.3. Kemudian bergerak ke kiri sebanyak k langkah, lalu tutup pintu rumah saat ini. Jika pintu sudah terbuka, tambahkan 1 ke count.4. Ulangi langkah 2 dan 3 hingga tidak dapat bergerak ke kanan atau ke kiri lagi.5. Kembalikan nilai count.

代码实现 (Python)pythondef count_house(street: Street, k: int) -> int: count = 0 while True: for _ in range(k): street.moveRight() street.openDoor() if street.isDoorOpen(): count += 1 for _ in range(k): street.moveLeft() street.closeDoor() if street.isDoorOpen(): count += 1 if not street.moveRight(): break return count

解释

Algoritma ini memanfaatkan pembukaan dan penutupan pintu sebagai penanda untuk melacak rumah yang telah dihitung. Dengan bergerak k langkah ke kanan dan ke kiri secara bergantian, kita dapat memastikan setiap rumah dikunjungi dan dihitung tepat satu kali.

Catatan: Nilai k dapat mempengaruhi efisiensi algoritma. Untuk hasil terbaik, sebaiknya pilih nilai k yang relatif kecil dibandingkan dengan jumlah rumah di jalan.


原文地址: https://www.cveoy.top/t/topic/fSCH 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录