熱門文章

2025年5月1日 星期四

ZeroJudge 解題筆記:k516. P4.根號 (Sqrt)

作者:王一哲
日期:2025年5月1日



ZeroJudge 題目連結:k516. P4.根號 (Sqrt)

解題想法


畫圖形的題目,關鍵在於找到各部位畫圖的規則。

Python 程式碼


使用時間約為 64 ms,記憶體約為 11.9 MB,通過測試。
import sys

for line in sys.stdin:
    k = int(line.strip())  # 短邊長度
    a, b = (k-1)//2 - 1, 2*k-1  # 左斜線、長邊長度
    n, h = k+a+k+b, k//2  # 全長,短邊於第 h 列
    grid = [[" "]*n for _ in range(k)]  # 圖形,預設為空白
    for i in range(k): grid[h][i] = "*"  # 短邊
    for i in range(a): grid[h+1+i][k+i] = "*"  # 左斜線
    for i in range(k): grid[k-1-i][k+a+i] = "*"  # 右斜線
    for i in range(2*k-1): grid[0][k+a+k+i] = "*"  # 長邊
    for i in range(k): print("".join(grid[i]))  # 印出圖形


C++ 程式碼


使用時間約為 8 ms,記憶體約為 2.2 MB,通過測試。
#include <iostream>
#include <string>
using namespace std;

int main() {
    ios::sync_with_stdio(0); cin.tie(0);
    int k;  // 短邊長度
    while(cin >> k) {
        int a = (k-1)/2 - 1, b = 2*k-1;  // 左斜線、長邊長度
        int n = k+a+k+b, h = k/2;  // 全長,短邊於第 h 列
        string grid[k];  // 圖形,預設為空白
        for(int i=0; i<k; i++) {
            for(int j=0; j<n; j++) grid[i] += ' ';
        }
        for(int i=0; i<k; i++) grid[h][i] = '*';  // 短邊
        for(int i=0; i<a; i++) grid[h+1+i][k+i] = '*';  // 左斜線
        for(int i=0; i<k; i++) grid[k-1-i][k+a+i] = '*';  // 右斜線
        for(int i=0; i<2*k-1; i++) grid[0][k+a+k+i] = '*';  // 長邊
        for(int i=0; i<k; i++) cout << grid[i] << "\n";  // 印出圖形
    }
    return 0;
}


沒有留言:

張貼留言