塔子哥的国际象棋困境-腾讯2023笔试(codefun2000)

题目链接
塔子哥的国际象棋困境-腾讯2023笔试(codefun2000)

题目内容

塔子哥是一位著名的国际象棋高手,他最喜欢在棋盘上布置皇后棋子。国际象棋棋盘由 8×8 个方格组成,行数用数字
1 到 8 表示,列数用字母 a 到 h 表示。例如,第一行第一列就是 a1,第二行第四列就是 d2。
某一天,塔子哥在棋盘上放置了一个皇后。作为国际象棋高手,他很清楚皇后可以攻击到同一行、同一列以及同一对角线(45 度或 135 度)的所有棋子。现在,塔子哥希望你能帮助他计算出,这个皇后能够攻击到的所有棋格子。

输入描述

输入包含一行,一个长度为 2 的字符串,表示皇后所在的位置。

输出描述

第一行输出一个整数 n,表示皇后能够攻击到的棋格子数量。
第二行输出 n 个长度为 2 的字符串,每个字符串表示一个被攻击到的棋格子,输出时按位置的字典序从小到大输出

样例1

输入

a1

输出

21
a2 a3 a4 a5 a6 a7 a8 b1 b2 c1 c3 d1 d4 e1 e5 f1 f6 g1 g7 h1 h8

题解1

#include<bits/stdc++.h>
using namespace std;

char s[4];
set<pair<char,char>> ans;

void solve(){
	// 同一行
	for(int i = 0; i < 8; i++){
		if('a'+i != s[1]) ans.insert({'a'+i,s[2]});
	}
	
	// 同一列
	for(int i = 1; i <= 8; i++){
		if(i != s[2]-'0') ans.insert({s[1], i + '0'});
	}
	// 45度对角线
	for(int i = 1; i <= 8; i++){
		if(s[1]+i < 'a'+8 && s[2] - '0' + i <= 8) ans.insert({s[1]+i,s[2]+i});
		if(s[1]-i >= 'a' && s[2] - '0' - i > 0) ans.insert({s[1]-i,s[2]-i});
	}
	// 135度对角线 
	for(int i = 1; i <= 8; i++){
		if(s[1]+i < 'a'+8 && s[2] - '0' - i > 0) ans.insert({s[1]+i,s[2]-i});
		if(s[1]-i >= 'a' && s[2] - '0' + i <= 8) ans.insert({s[1]-i,s[2]+i});
	}
}
int main(){
	scanf("%s", s + 1);
	solve();
	printf("%d\n", int(ans.size()));
	for(auto& it: ans){
		printf("%c%c ", it.first,it.second);
	}
	printf("\n");
	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值