CF85A Domino (C ++ )

首先纪念一下本人第一次写博客!

我们来大概说一下这道题:

偷偷打个哈欠。

原题链接如下~

Problem - 85A - Codeforcesicon-default.png?t=M276https://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!

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值