## 错因
```cpp
round(i,0,s.length())
{
/*条件1*/if ((i + 1) % 3 == 0) printf("*.%c.*",s[i]);//温蒂框架
/*条件2*/else if (i == 0) printf("#.%c.#",s[i]);//若是开头,有头有尾打印
/*条件3*/else if (i == s.length() - 1 && (i + 2) % 3 == 0) printf("#.%c.#",s[i]);//如果是最后一个,且前一个和本身都不是温蒂,有头有尾打印
/*条件4*/else if (!((i + 2) % 3 == 0)) printf(".%c.#",s[i]);//如果下一个字母不是温蒂,无头有尾打印
/*条件5*/else printf(".%c.",s[i]);//否则,既下一个是温蒂框架,且不是开头结尾,无头无尾打印
}
```
如果输入了$3k+2$个字母,倒数第二个字母会走条件$4$**有尾**输出,而最后一个字母**有头**有尾输出,导致重复,并WA
------------
------------
## 错误数据
输入:
ABCDE
错误输出:
```
..#...#...*...#...#..
.#.#.#.#.*.*.#.#.#.#.
#.A.#.B.*.C.*.D.##.E.#
.#.#.#.#.*.*.#.#.#.#.
..#...#...*...#...#..
```
```
D.##.E
```
连续两个#不对
正确输出:
```
..#...#...*...#...#..
.#.#.#.#.*.*.#.#.#.#.
#.A.#.B.*.C.*.D.#.E.#
.#.#.#.#.*.*.#.#.#.#.
..#...#...*...#...#..
```
---------------
---------
## 修改
正确思路:开头有头有尾输出,其他时候(包括结尾)温蒂框架有头有尾输出,其他情况下无头有尾输出,除非后头有温蒂框架进行避让。
1.将条件3的```&& (i + 2) % 3 == 0```去掉。
------
----
## AC代码
```cpp
#include <bits/stdc++.h>
#define MOD 998244353
#define mod 1000000007
#define ll long long
#define ull unsigned long long
#define ui unsigned int
#define range(i,a,b) for (int i = a; i <= b; i++)
#define round(i,a,b) for (int i = a; i < b; i++)
#define rrange(i,a,b) for (int i = a; i >= b; i--)
#define rround(i,a,b) for (int i = a; i > b; i--)
using namespace std;
int main()
{
string s;
cin >> s;
int i;
round(i,0,s.length())
{
if ((i + 1) % 3 == 0) cout << ".*..";
else if (i == 0) cout << "..#..";
else cout << ".#..";
}
cout << endl;
round(i,0,s.length())
{
if ((i + 1) % 3 == 0) cout << "*.*.";
else if (i == 0) cout << ".#.#.";
else cout << "#.#.";
}
cout << endl;
round(i,0,s.length())
{
if ((i + 1) % 3 == 0) printf("*.%c.*",s[i]);
else if (i == 0) printf("#.%c.#",s[i]);
else if (i == s.length() - 1 && (i + 2) % 3 == 0) printf(".%c.#",s[i]);
else if (!((i + 2) % 3 == 0)) printf(".%c.#",s[i]);
else printf(".%c.",s[i]);
}
cout << endl;
round(i,0,s.length())
{
if ((i + 1) % 3 == 0) cout << "*.*.";
else if (i == 0) cout << ".#.#.";
else cout << "#.#.";
}
cout << endl;
round(i,0,s.length())
{
if ((i + 1) % 3 == 0) cout << ".*..";
else if (i == 0) cout << "..#..";
else cout << ".#..";
}
return 0;
}
```
by wanglexi @ 2023-07-20 22:30:35
@[wanglexi](/user/378403) 蟹蟹大佬!此帖终
by __Harry_Haiyun__ @ 2023-07-21 09:37:01