首先纪念一下本人第一次写博客!
我们来大概说一下这道题:
偷偷打个哈欠。
原题链接如下~
Problem - 85A - Codeforceshttps://codeforces.com/problemset/problem/85/A
题意简述
你要用 1×2 的多米诺骨牌铺满一个 4\times n4×n 的矩阵使得每条纵向切割线均与骨牌相交。骨牌可以旋转,即可以使用 1\times 21×2 和 2\times 12×1 的多米诺骨牌。
每一张骨牌都要上色,为了简化题目,一个小写字母即代表一种颜色,同一颜色的骨牌不能相邻。
请你输出一种满足要求的方案。
输入一个整数 n (1 ≤ n ≤ 100),表示矩阵的列数。
输出一个 4 × n 的由小写字母组成的矩阵,第 (i, j) (i, j) 格的字符表示覆盖该位置的骨牌的颜色。
若没有满足要求的方案,请输出 -1
。
输入 | 输出 |
4 | yyzz bccd bxxd yyaa |
以上是题目简介, 纯纯思维题很容易发现规律的。
一看到这道题第一反应就是 “ 砌砖 ” 嘛, 但是有有些不一样, 这道题可不能和砌砖一样把骨牌劈开, 所以我们只能让他竖起来,让我们看几个例子:
输入 | 输出 |
5 | aabbc bbaac eccdd eddcc |
6 | aabbaa eccddf eddccf aabbaa |
11 | aabbaabbaac bbaabbaabbc fddeeddeedd feeddeeddee |
12 | aabbaabbaabb eccddccddccf eddccddccddf aabbaabbaabb |
通过上面的例子我们就已经不难发现这道题的规律了
话不多说, 上代码!!!!咱既然是小白, 那就要用小白也能看懂的代码
#include<iostream>
using namespace std;
int main()
{
int n;
scanf("%d", &n);
if(n % 2 == 0)//n为偶数的情况
{
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("aa");
else printf("bb");
}
printf("\ne");
for(int i = 1; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("cc");
else printf("dd");
}
printf("f\ne");
for(int i = 1; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("dd");
else printf("cc");
}
printf("f\n");
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("aa");
else printf("bb");
}
}
else//n为奇数的情况
{
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("aa");
else printf("bb");
}
printf("e\n");
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("bb");
else printf("gg");
}
printf("e\nf");
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("dd");
else printf("cc");
}
printf("\nf");
for(int i = 0; i < n / 2; i ++ )
{
if(i % 2 == 0) printf("gg");
else printf("dd");
}
}
return 0;
}
虽然代码很长, 但是思路一定是清晰的。
最后祝和我一样的 大佬们 天天AK!