質問するログイン新規登録

回答編集履歴

2

間違い

2024/03/26 07:35

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -3,7 +3,7 @@
3
3
 
4
4
  行(c) を 0 始まりとして max=5 とする時、ひし形の上半分(=三角形) c=0~4 は
5
5
  スペース `max-1-c` 個
6
- アスタリスク `c*2-1` 個
6
+ アスタリスク `c*2+1` 個
7
7
  を表示すれば書くことが出来ます。
8
8
  ひし形の下半分(中央無し)は c=3~0 ならそのまま書けますが、それではループを別にしなければならないため、 c=5~8 を 3~0 に変換するようにします。
9
9
  ```
@@ -15,7 +15,7 @@
15
15
  しかしどうせ同じ処理をするのなら c=9 以上もひし形(の各行)を描けるようにすればループは1つで済みますので、全体のループカウンタを i とした時 `c = i % ひし形の行数` で 9 以上を c=0~8 に変換するようにします。
16
16
 
17
17
  max=5の時:
18
- |i|c=i%9|c=5~83~0|`" "(max-1-c)` + `"*"(c*2+1)`)|
18
+ |i|c=i%9|c>=max c=(max-1)*2-c|`" "(max-1-c)` + `"*"(c*2+1)`)|
19
19
  |:--:|:--:|:--:|:----|
20
20
  |0|0|0|`____*`|
21
21
  |1|1|1|`___***`|

1

表追加

2024/03/26 06:54

投稿

jimbe
jimbe

スコア13357

answer CHANGED
@@ -2,7 +2,7 @@
2
2
  ひし形と三角形では無くひし形1つとひし形の上半分(中央含む)とし、コードとしては複数行で構成された図形では無く1行の重なりと考えることもできます。
3
3
 
4
4
  行(c) を 0 始まりとして max=5 とする時、ひし形の上半分(=三角形) c=0~4 は
5
- スペース `max-c` 個
5
+ スペース `max-1-c` 個
6
6
  アスタリスク `c*2-1` 個
7
7
  を表示すれば書くことが出来ます。
8
8
  ひし形の下半分(中央無し)は c=3~0 ならそのまま書けますが、それではループを別にしなければならないため、 c=5~8 を 3~0 に変換するようにします。
@@ -13,6 +13,25 @@
13
13
  ```
14
14
  これにより c=0~8 でひし形を1つ描け、また c=0~5 のループも並べれば三角形をもう1つ描けます。
15
15
  しかしどうせ同じ処理をするのなら c=9 以上もひし形(の各行)を描けるようにすればループは1つで済みますので、全体のループカウンタを i とした時 `c = i % ひし形の行数` で 9 以上を c=0~8 に変換するようにします。
16
+
17
+ max=5の時:
18
+ |i|c=i%9|c=5~8→3~0|`" "(max-1-c)` + `"*"(c*2+1)`)|
19
+ |:--:|:--:|:--:|:----|
20
+ |0|0|0|`____*`|
21
+ |1|1|1|`___***`|
22
+ |2|2|2|`__*****`|
23
+ |3|3|3|`_*******`|
24
+ |4|4|4|`*********`|
25
+ |5|5|**3**|`_*******`|
26
+ |6|6|**2**|`__*****`|
27
+ |7|7|**1**|`___***`|
28
+ |8|8|**0**|`____*`|
29
+ |9|**0**|0|`____*`|
30
+ |10|**1**|1|`___***`|
31
+ |11|**2**|2|`__*****`|
32
+ |12|**3**|3|`_*******`|
33
+ |13|**4**|4|`*********`|
34
+
16
35
  ```java
17
36
  public class Main {
18
37
  public static void main(String[] args) throws Exception {
@@ -25,7 +44,7 @@
25
44
  c = (max-1)*2 - c;
26
45
  }
27
46
  //1行描画
28
- for(int j=0; j<max-c; j++) {
47
+ for(int j=0; j<max-1-c; j++) {
29
48
  System.out.print(" ");
30
49
  }
31
50
  for(int j=0; j<c*2+1; j++) {
@@ -37,18 +56,18 @@
37
56
  }
38
57
  ```
39
58
  ```
40
- *
59
+ *
41
- ***
60
+ ***
42
- *****
61
+ *****
43
- *******
62
+ *******
44
- *********
63
+ *********
45
- *******
64
+ *******
46
- *****
65
+ *****
47
- ***
66
+ ***
48
- *
67
+ *
49
- *
68
+ *
50
- ***
69
+ ***
51
- *****
70
+ *****
52
- *******
71
+ *******
53
- *********
72
+ *********
54
73
  ```