TOJ 110

TOJ 110

題目

https://toj.tfcis.org/oj/pro/110/

第一行有一個正整數數 $n$,接下來有 $n$ 行,每行有一個數,表示三角形的高度

請依照題目的樣子輸出六芒星

例如 $n = 4$ 時輸出

1
2
3
4
5
   *
*******
*****
*******
*

$n = 5$ 時輸出

1
2
3
4
5
6
7
    *
***
*********
*******
*********
***
*

想法

把六芒星拆成上面的三角形、中間三個橫線、下面的三角形來輸出

Code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//By Koios1143
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n;
while(n--){
cin>>m;
// 上面星星樹樹
// i 表示行數
for(int i=0 ; i<m-3 ; i++){
// 先輸出空白
for(int j=0 ; j<m-1-i ; j++){
cout<<' ';
}
// 再輸出星星
for(int j=0 ; j<(i+1)*2-1 ; j++){
cout<<'*';
}
cout<<'\n';
}

// 中間三條線
for(int i=0 ; i<2*m-1 ; i++){
cout<<'*';
}
cout<<"\n ";
for(int i=0 ; i<2*m-3 ; i++){
cout<<'*';
}
cout<<"\n";
for(int i=0 ; i<2*m-1 ; i++){
cout<<'*';
}
cout<<'\n';

// 下面星星樹
// i 表示行數
for(int i=0 ; i<m-3 ; i++){
// 先輸出空白
for(int j=0 ; j<3+i ; j++){
cout<<' ';
}
// 再輸出星星
for(int j=0 ; j<(m-3)*2-1-2*i ; j++){
cout<<'*';
}
cout<<'\n';
}
}
return 0;
}

複雜度分析

總時間複雜度約為 $O(n(2m^2 + 3m))$ 約為 $O(nm^2)$