日期: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;
}
沒有留言:
張貼留言