# String Manipulation# Nested Loops# Pattern Printing

a781 - 3. Checkerboard

🔗 前往 ZeroJudge 原題

題目描述

題目要求輸出一個 8x8 的棋盤,棋盤的格子由 '#' 和 '.' 字符組成,並根據輸入的整數 a 決定棋盤的寬度。需要注意的是,每兩個棋盤之間需要空一行。

解題思路

這題的核心在於利用巢狀迴圈產生棋盤的 pattern。外層迴圈控制棋盤的行數 (固定為 8),中層迴圈控制棋盤的列數 (固定為 8),內層迴圈則根據行和列的索引決定輸出 '#' 還是 '.'。 題目要求每 a 個格子輸出一次,因此需要再加入一層迴圈來控制輸出的數量。 另外,題目要求每兩個棋盤之間空一行,因此在輸出完一個棋盤後,需要輸出一個換行符。

複雜度分析

  • 時間複雜度: O(8 * 8 * a) 也就是 O(a),因為 8x8 是常數。
  • 空間複雜度: O(1)

程式碼

#include <iostream>
using namespace std;
int main(){
	int a;
	while(cin >> a){
		for(int i=0;i<8;i++){
			for(int k=0;k<a;k++){
				if(i%2==0){
					for(int j=0;j<8;j++){
						if(j%2==0){
							for(int ii=0;ii<a;ii++){
								cout << '#';
							}
						}
						else{
							for(int ii=0;ii<a;ii++){
								cout << '.';
							}
						}
					}
					cout << "\n";
				}
				else{
					for(int j=0;j<8;j++){
						if(j%2==0){
							for(int ii=0;ii<a;ii++){
								cout << '.';
							}
						}
						else{
							for(int ii=0;ii<a;ii++){
								cout << '#';
							}
						}
					}
					cout << "\n";
				}
			}
		}
	}
}

Discussion