Menu
CoddyTech

Ôn tập: điều khiển vòng lặp nâng cao

Thuộc phần Logic và luồng điều khiển trong hành trình GO của Coddy. Bài học 5 trên 68.

challenge icon

Thử thách

Dễ

Trong thử thách này, bạn sẽ kết hợp câu lệnh break có nhãn với switch và fallthrough để tạo một hệ thống giám sát an ninh. Hệ thống tìm kiếm mối đe dọa trong nhiều khu vực an ninh và phân loại chúng theo các cấp độ cảnh báo tăng dần.

Bạn sẽ nhận hai đầu vào:

  • Một chuỗi (string) biểu thị cấp độ đe dọa cần tìm (ví dụ: "high")
  • Một chuỗi biểu thị số khu vực tối đa cần tìm (ví dụ: "3")

Bạn được cung cấp dữ liệu về các khu vực an ninh sau:

zones := [][]string{
    {"low", "medium", "low"},
    {"medium", "high", "low"},
    {"critical", "medium", "high"},
    {"low", "critical", "medium"}
}

Nhiệm vụ của bạn là:

  1. Phân tích cấp độ đe dọa từ đầu vào thứ nhất
  2. Phân tích số khu vực tối đa cần tìm từ đầu vào thứ hai
  3. Dùng các vòng lặp lồng nhau với câu lệnh break có nhãn để tìm kiếm trong các khu vực
  4. Khi tìm thấy cấp độ đe dọa mục tiêu, in ra "Threat found at zone [zone_number] position [position]" và thoát ngay cả hai vòng lặp bằng câu lệnh break có nhãn
  5. Sau khi tìm thấy mối đe dọa (hoặc nếu không tìm thấy), dùng câu lệnh switch với fallthrough để hiển thị cảnh báo an ninh dựa trên cấp độ đe dọa bạn đang tìm

Câu lệnh switch hoạt động như sau:

  • Với "critical": In ra "CRITICAL: Lockdown initiated!" rồi tiếp tục để in cả cảnh báo cấp độ cao
  • Với "high": In ra "HIGH: Security breach detected!" rồi tiếp tục để in cả cảnh báo cấp độ trung bình
  • Với "medium": In ra "MEDIUM: Increased monitoring active"
  • Với "low": In ra "LOW: Standard security protocols"

Nếu không tìm thấy mối đe dọa sau khi tìm trong số khu vực đã chỉ định, hãy in ra "Threat not found in searched zones" trước khi hiển thị các cảnh báo an ninh. Đánh số khu vực và vị trí trong mỗi khu vực từ 0.

Tự làm thử

package main

import (
    "fmt"
    "strconv"
)

func main() {
    // Đọc đầu vào
    var threatLevel string
    var maxZonesStr string
    fmt.Scanln(&threatLevel)
    fmt.Scanln(&maxZonesStr)
    
    // Chuyển số vùng tối đa thành số nguyên
    maxZones, _ := strconv.Atoi(maxZonesStr)
    
    // Dữ liệu các vùng an ninh
    zones := [][]string{
        {"low", "medium", "low"},
        {"medium", "high", "low"},
        {"critical", "medium", "high"},
        {"low", "critical", "medium"},
    }
    
    // TODO: Viết code của bạn bên dưới
    // Dùng các vòng lặp lồng nhau với break có nhãn để tìm mối đe dọa
    // In ra vị trí mối đe dọa nếu tìm thấy, hoặc "Threat not found in searched zones" nếu không tìm thấy
    // Sau đó dùng switch với fallthrough để đưa ra cảnh báo an ninh
    
}

Tất cả bài học trong Logic và luồng điều khiển

Tự luyện tập: Trình biên dịch Go online