【题目大意】
一个n高的塔,由@ * ?三种字符组成。每行相邻两个字符不能相邻。
'?' 表示未确定是 '@' 还是 '*' 。
求'@' 可能出现的最多和最少次数。
【分析】
在可以填的情况下 先填'@' 就是最多,先填 ' * '就是最少。
【代码】
#include <iostream>
#include <cstring>
using namespace std;
#define MAXN 100 + 100
int main()
{
int n;
while(cin >> n && n > 0)
{
char b[MAXN][MAXN], c[MAXN][MAXN];
memset(b, ' ', sizeof(b));
memset(c, ' ', sizeof(c));
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
{
cin >> b[i][j];
c[i][j] = b[i][j];
}
int num1 = 0, num2 = 0;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
{
if (b[i][j] == '?' && b[i][j-1] != '@' && b[i][j+1] != '@')
{
num1++;
b[i][j] = '@';
}
else if(b[i][j] == '@') num1++;
if (c[i][j] == '?' && c[i][j-1] != '*' && c[i][j+1] != '*')
{
num2++;
c[i][j] = '*';
}
else if(c[i][j] == '*') num2++;
}
cout << num1 <<" " <<n*(n+1)/2 - num2 << endl;
}
}