Giải bài ntucoder CLOA - Thành Cổ Loa

Thảo luận trong 'Khác' bắt đầu bởi nguyen minh duc, 30 Tháng bảy 2023.

  1. nguyen minh duc

    Bài viết:
    28
    Link bài:

    Thuật toán:


    • Ta bao các cạnh bên ngoài của thành bằng các phần tử mang giá trị 1.
    • Tường thành là một mảng 2 chiều.
    • Tạo một chương trình con để di chuyển, khi đụng trúng bờ bao 1 hoặc đụng trúng lớp tường bên ngoài, sẽ lập tức rẽ phải.
    • Bài này gần tương tự bài VOXO, chỉ khác VOXO đi từ trong ra, bài này đi từ ngoài vào.

    Code:

    Mã:
    #include<bits/stdc++.h>
    using namespace std;
    
    int n, value_moment;
    int a[107][107];
    
    void runfor(int position_x, int position_y, int direction_x, int direction_y){
        int x = position_x; int y = position_y;
        while (a[x+direction_x][y+direction_y] == 0){
            a[x][y] = value_moment+1;
            x += direction_x; y += direction_y;
            value_moment++;
        }
        if (value_moment == n*n-1){
            a[x][y] = n*n;
            return;
        }
        runfor(x, y, -direction_y, direction_x);
    }
    
    void read(){
        ios_base::sync_with_stdio(0);
        cin.tie(0); cout.tie(0);
        //freopen("CLOA.INP", "r", stdin);
        //freopen("CLOA.OUT", "w", stdout);
        cin >> n;
    }
    
    void run(){
        for (int i = 0; i <= n+1; i++)
            a[0] = a[0] = a[n+1] = a[n+1] = 1;
        runfor(1, 1, 1, 0);
    
        for (int i = 1; i <= n; i++){
            for (int j = 1; j <= n; j++) cout << a[j] << " ";
            cout << "\n";
        }
    }
    
    int main(){
        read();
        run();
    
        return 0;
    }
     
  2. Đăng ký Binance
Trả lời qua Facebook
Đang tải...