```
当num=1时,横向和竖向是一样的,相当于计算了两次。所以需要特判并输出答案/2。
```
```
#include <stdio.h>
int n, m;
int num;
char s[200][200];
int count;
void lie(int x, int y, int k);
void hang(int x, int y, int k);
int main()
{
scanf("%d %d", &n, &m);
scanf("%d", &num);
for (int i = 0; i < n; i++) {
scanf("%s", s[i]);
}
for (int i = 0; i < n; i++) {
for (int j = 0; j + num - 1 < m; j++) {
hang(i, j, 0);
}
}
for (int j = 0; j < m; j++) {
for (int i = 0; i + num - 1 < n; i++) {
lie(i, j, 0);
}
}
if(num == 1)//特殊判断
{
printf("%d", count/2);
}
else
{
printf("%d", count);
}
return 0;
}
void hang(int x,int y,int k) {
if (s[x][y] == '.')k++;
else return;
if (k == num)count++;
else {
if (y + 1 < m)hang(x, y + 1, k );
}
}
void lie(int x, int y, int k) {
if (s[x][y] == '.')k++;
else return;
if (k == num) {
count++;
}
else {
if (x + 1 < n)
lie(x+1, y , k );
}
}
```
by luoyige @ 2022-12-04 11:46:28
是的。
by W121w @ 2022-12-24 21:15:46
@[telankesi](/user/866969) k=1的时候,答案要除以二
by kenyfly @ 2023-02-23 14:41:39
@[kenyfly](/user/940762)
谢谢。
by mooktian @ 2023-02-24 16:25:58