题目
洛谷题目传送门 【P12979】 [GCJ 2022 Qualification] Punched Cards
双倍经验:
DMOJ题目传送门 【gcj22qra】 Google Code Jam '22 Qualification Round Problem A - Punched Cards(封面图就是从这来的)
太卡就用 Virtual Judge DMOJ-gcj22qra。
正文
比较简单的一道题,按照题意模拟即可。
通过观察样例得到,每组数据输出时左上角都是 4 个点:
..+-+-+-+
..|.|.|.|
+-+-+-+-+
|.|.|.|.|
+-+-+-+-+
|.|.|.|.|
+-+-+-+-+
特判一下左上角的位置,再结合其他字符(|
、-
、.
、+
)在“卡片”中应当存在的位置,用分支结构就可以了。
|
位于偶数行奇数列上;+
位于奇数行奇数列上;-
位于奇数行偶数列上;.
位于偶数行偶数列上,以及左上角有 4 个。
循环应该循环到 2 \times R + 1(题目中明确说明的)以及 2 \times C + 1(观察可知,比如 C=4 时输出了 9 列)。
注意要输出 Case #x:
。
代码
/* By CB_X2_Jun */
#include <iostream>
using namespace std;
int t,r,c,z;
int main()
{
cin.tie(0);cout.tie(0);ios::sync_with_stdio(false);
cin >> t;
z=t;
while(t--) // 多组数据
{
cin >> r >> c;
cout << "Case #" << z-t << ":\n"; // 别忘了这个
for(int i=1; i<=2*r+1; i++)
{
for(int j=1; j<=2*c+1; j++)
{
if(i==1&&j==1||i==1&&j==2||i==2&&j==1||i==2&&j==2)cout << "."; // 特判左上角
else if(i%2==1&&j%2==1)cout << "+";
else if(i%2==0&&j%2==1)cout << "|";
else if(i%2==1&&j%2==0)cout << "-";
else cout << "."; // 这里都按照位置的奇偶性做判断
}
cout << endl;
}
}
}
请勿 Copy + Paste,共创和谐洛谷!