回答編集履歴

2

追記

2022/11/04 11:28

投稿

fana
fana

スコア11656

test CHANGED
@@ -28,3 +28,45 @@
28
28
  return 0;
29
29
  }
30
30
  ```
31
+
32
+ ---
33
+
34
+ 何やら人気の課題なのかもしれないし(?) 念のため最も話的に愚直だと思う実装を書いておく.
35
+ (呼び出し側の main 関数のところは↑と同一なので省略)
36
+
37
+ ```C
38
+ //2種類の文字を交互に出力したいなら,どっちを出力するか?を毎回切り替えればいいよねっていう.
39
+ void F( int n )
40
+ {
41
+ //次に出力する行の先頭で出力すべき文字
42
+ char FirstOutputChar_for_NextLine = '+'; //最初の行は'+'だよね.
43
+
44
+ for( int y=0; y<n; ++y ) //n行分のループ
45
+ {
46
+ //この行内で次に出力すべき文字.
47
+ char OutputChar = FirstOutputChar_for_NextLine;
48
+
49
+ for( int x=0; x<n; ++x ) //現在の行のn文字についてループ
50
+ {
51
+ //現在出力すべき文字を出力する
52
+ putchar( OutputChar );
53
+
54
+ //「この行内で次に出力すべき文字」を更新する
55
+ //今 '+' を出力したなら次は '-' にすればいいし,
56
+ //そうでないなら次は '+' にすればいい.
57
+ if( OutputChar=='+' )
58
+ { OutputChar = '-'; }
59
+ else
60
+ { OutputChar = '+'; }
61
+ }
62
+ putchar( '\n' ); //行末で改行
63
+
64
+ //(行内の話と同様に)
65
+ //「次の行の先頭で表示すべき文字」も更新する.
66
+ if( FirstOutputChar_for_NextLine=='+' )
67
+ { FirstOutputChar_for_NextLine = '-'; }
68
+ else
69
+ { FirstOutputChar_for_NextLine = '+'; }
70
+ }
71
+ }
72
+ ```

1

説明を書く.

2022/11/04 09:28

投稿

fana
fana

スコア11656

test CHANGED
@@ -1,4 +1,8 @@
1
+ `f(x,y) = cos(x)*sin(y)` のグラフを眺めてみると,出力したい物と非常によく似ていることに気づくでしょう.
2
+ すなわち,(グラフをちょろっと伸縮&オフセットすれば)`f(x,y)` の値の符号を用いて `+`, `-` のどちらを出力すれば良いのかを判断できそうです.
3
+
4
+ 方法論を用意できたので,あとはそれを実装するだけです.
1
- 何か昔同じ話をやっような気がする
5
+ 以下のコードはこの話を愚直に書きました.
2
6
 
3
7
  ```C
4
8
  void F( int n )