回答編集履歴

4

最初の指摘が未修正なので、解説を追加

2021/07/18 01:10

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -67,3 +67,35 @@
67
67
  2211
68
68
 
69
69
  ```
70
+
71
+ ---
72
+
73
+ 最初の指摘を修正してもらえないようなので、何が起こっているかを説明しておきます。
74
+
75
+ ```c
76
+
77
+ int i,j,tate,yoko,count[1000][1000];
78
+
79
+ char c[1000][1000];
80
+
81
+ ```
82
+
83
+ こちらのコードは、ローカル変数のサイズを多くとっていることで、**たまたま**`main`開始までに使われていない領域が割り当てられ、結果的に最初から0が設定されているように見えているだけです。
84
+
85
+
86
+
87
+ さて、ローカル変数に使用できるメモリには上限(環境によるが、linuxのgccで8MB)があります。上記のコードだと、`count`で4MB、`c`で1MBが使われます。今回は簡単なコードなので何とかなりましたが、ここからさらに`int`の配列が必要となったら、さらに4MB使うことになり破綻します。
88
+
89
+
90
+
91
+ 問題によると、幅高さの最大値は30なので、それだけ確保した上で初期化して使うべきです。(先頭だけ値を指定すれば、残りは0で初期化されます)
92
+
93
+ ```c
94
+
95
+ int i,j,tate,yoko,count[32][32]={0};
96
+
97
+ char c[32][32]={0};
98
+
99
+ ```
100
+
101
+ もしくは、変数定義を`main`の外に出してグローバル変数にするという手もあります。グローバル変数にはサイズ制限はほとんどありませんし、0で初期化されることが保証されています。

3

スタイル適用し忘れ

2021/07/18 01:10

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -40,11 +40,11 @@
40
40
 
41
41
  ---
42
42
 
43
- たとえば、入力例1の場合、"%c"で読み込まれる最初の文字は、3 4の後ろにある改行文字です。
43
+ たとえば、入力例1の場合、`"%c"`で読み込まれる最初の文字は、`3 4`の後ろにある改行文字です。
44
44
 
45
- その後#.##が順番に読み込まれますが、その次に読み込まれるのはやはり改行文字です。
45
+ その後`#.##`が順番に読み込まれますが、その次に読み込まれるのはやはり改行文字です。
46
46
 
47
- 改行文字をnで表すと、最終的に読み込まれた結果は、以下のようになります。
47
+ 改行文字を`n`で表すと、最終的に`c`に読み込まれた結果は、以下のようになります。
48
48
 
49
49
  ```text
50
50
 
@@ -56,7 +56,7 @@
56
56
 
57
57
  ```
58
58
 
59
- これに対して#の数を数えると、以下の結果となります。
59
+ これに対して`#`の数を数えると、以下の結果となります。
60
60
 
61
61
  ```text
62
62
 

2

コメントを受け追記

2021/07/15 10:46

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -37,3 +37,33 @@
37
37
  printf("\n");
38
38
 
39
39
  ```
40
+
41
+ ---
42
+
43
+ たとえば、入力例1の場合、"%c"で読み込まれる最初の文字は、「3 4」の後ろにある改行文字です。
44
+
45
+ その後「#.##」が順番に読み込まれますが、その次に読み込まれるのはやはり改行文字です。
46
+
47
+ 改行文字を「n」で表すと、最終的に読み込まれた結果は、以下のようになります。
48
+
49
+ ```text
50
+
51
+ n#.#
52
+
53
+ #n..
54
+
55
+ #.n#
56
+
57
+ ```
58
+
59
+ これに対して#の数を数えると、以下の結果となります。
60
+
61
+ ```text
62
+
63
+ 2221
64
+
65
+ 3332
66
+
67
+ 2211
68
+
69
+ ```

1

指摘済みだったので追記

2021/07/15 10:35

投稿

actorbug
actorbug

スコア2224

test CHANGED
@@ -1,4 +1,4 @@
1
- 初期化していないローカル変数には、でたらめな値が入ります。
1
+ すでに他の方も指摘していますが、初期化していないローカル変数には、でたらめな値が入ります。
2
2
 
3
3
  `count`が`0`から始まらない、`c`に`#`が紛れ込んで計数を誤るなどの問題が発生する可能性があります。
4
4