ABC244 A~D题解

目录

A题:

代码:

C题:

代码:

题意:

思路:

D题:

代码:

题意:

思路:


A题:

代码:

#include <iostream>
using namespace std;

int main()
{
	int a;
	char x;
	cin >> a;
	for(int i = 0; i < a; i++) cin >> x;
	cout << x;
	return 0;
 } 

题意:

输入N和一个长度为N的字符串,输出字符串的最后一个字符

思路:

没啥好说的,输入字符串,输出最后一个字符

B题:

代码:

#include <iostream>
#include <cstring>
using namespace std;

int x, y, n;
char face;
string s;

int main()
{
	face = 'e';
	cin >> n;
	cin >> s;
	for(int i = 0; i < n; i++)
	{
		if(s[i] == 'S')
		{
			if(face == 'e') x++;
			else if(face == 'w') x--;
			else if(face == 'n') y++;
			else y--;
		}
		else
		{
			if(face == 'e') face = 's';
			else if(face == 's') face = 'w';
			else if(face == 'w') face = 'n';
			else face = 'e';
		}
	}
	cout << x << " " << y;
	return 0;
}

题意:

输入一个N和一个长度为N的字符串,字符串由若干个S和R组。

高桥一开始在一个平面直角坐标系的原点处,面向东。

对于每一个字符,如果其为S,高桥向前一格,如果为R,高桥向右转90°

输出高桥最后的位置

思路:

模拟即可。

可以设置一个变量标记高桥面向的位置。

C题:

代码:

#include <iostream>
#include <map>
using namespace std;

map<int, bool> num;
int n, id = 1;

int main()
{
	cin >> n;
	while(n)
	{
		while(num[id]) id++;
		cout << id << endl;
		cout.flush();
		num[id] = true;
		cin >> n;
		num[n] = true;
	}
	return 0;
}

题意:

高桥、青木依次报数,数值范围为1~2n+1, 不可重复报数,先报不出来者输。

思路:

这题还是很简单的。num为标记,记录已经被报的数,id从小到大遍历1~2n+1,找出下一个可以报的数。当接收到0,结束程序。唯一的坑点就是输出过后要写`cout.flush()`。总体来说没什么难度。

D题:

代码:

#include <iostream>
#include <cstring>
using namespace std;

int main()
{
	string a, b, c, x, y, z;
	cin >> a >> b >> c >> x >> y >> z;
	string f = a+b+c;
	if(f == x+y+z || f == z+x+y || f == y+z+x) cout << "Yes";
	else cout << "No";
	return 0;
}

题意:

三个人分别带着颜色为a, b, c的三顶帽子,再10¹⁸次交换后,三个人的帽子颜色能否变为x,y,z。(a, b, c, x, y, z分别为RGB中的一个字母)

思路:

这其实也是一道大水题,只要确定abc在偶数次交换后可以变成xyz即可。人肉暴力一下,发现只有三种情况(详见代码)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值