BOJ 2447:星図10-C++
星をたたく
コード#コード# #include <iostream>
#include <vector>
using namespace std;
char board[2200][2200];
void pattern(int y, int x, int size){
if(size == 0) return;
for(int i=y+size/3;i<y+size/3+size/3;i++)
{
for(int j=x+size/3;j<x+size/3+size/3;j++)
{
board[i][j] = ' ';
}
}
int one = size/3;
int two = size/3 + size/3;
/* 가운데 부분을 제외한 8부분에 대해 재귀 실행 */
pattern(y, x, size/3);
pattern(y+one, x, size/3);
pattern(y+two, x, size/3);
pattern(y, x+one, size/3);
pattern(y, x+two, size/3);
pattern(y+one, x+two, size/3);
pattern(y+two, x+one, size/3);
pattern(y+two, x+two, size/3);
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0;i<N;i++)
fill(board[i], board[i]+N, '*');
pattern(0, 0, N);
for(int i=0;i<N;i++)
cout << board[i]<<'\n';
return 0;
}
#include <iostream>
#include <vector>
using namespace std;
char board[2200][2200];
void pattern(int y, int x, int size){
if(size == 0) return;
for(int i=y+size/3;i<y+size/3+size/3;i++)
{
for(int j=x+size/3;j<x+size/3+size/3;j++)
{
board[i][j] = ' ';
}
}
int one = size/3;
int two = size/3 + size/3;
/* 가운데 부분을 제외한 8부분에 대해 재귀 실행 */
pattern(y, x, size/3);
pattern(y+one, x, size/3);
pattern(y+two, x, size/3);
pattern(y, x+one, size/3);
pattern(y, x+two, size/3);
pattern(y+one, x+two, size/3);
pattern(y+two, x+one, size/3);
pattern(y+two, x+two, size/3);
return;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
int N;
cin >> N;
for(int i=0;i<N;i++)
fill(board[i], board[i]+N, '*');
pattern(0, 0, N);
for(int i=0;i<N;i++)
cout << board[i]<<'\n';
return 0;
}
1)スケジュール領域の中間部分を「」値に保存する
(yとxの範囲は
y+size/3 ~ y+size/3+size/3
x+size/3 ~ x+size/3+size/3
の場合は常に「」の値2)中間部を除く、
나머지 8부분
に対して再帰:「」の値を持つ座標のフィーチャーを検索して解決します.
(
y/size%3 == 1 && x/size%3 == 1
で空白!)Reference
この問題について(BOJ 2447:星図10-C++), 我々は、より多くの情報をここで見つけました https://velog.io/@neity16/BOJ-2447-별찍기-10-Cテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol