刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

翻卡片

题目描述:

小蓝在玩翻卡片游戏,每张卡片一面写着大写字母“A”,另一面写着大写字母“B”。首先将卡片排成一个N*N的矩阵。有的卡片是A面朝上,有的卡片是B面朝上。

现给定N的值,及N*N矩阵中每张卡片的状态,请你帮助小蓝挑选一张B面的卡,翻转成A面,使得翻转后的上、下、左、右四个方向相连的A面卡片最多,并将相连最多的卡片数量输出。

例如:N=3,3*3的矩阵中的卡片状态如下:

选择红框内那张B面卡片,翻转为A面,可以使翻转后四个方向相连的A面卡片最多,为5张。

输入描述

第一行输入一个正整数N(2≤N≤50),表示矩阵的行数和列数

第二行开始输入N行,每行输入N个字符(‘A’或者‘B’),表示矩阵中卡片状态,字符之间以一个空格隔开 

输出描述

输出一个整数,表示翻转后矩阵中上、下、左、右四个方向相连的最多A面卡片张数


样例输入

3
A B B
A B A
B A B

样例输出

5

使用微信搜索喵呜刷题,轻松应对考试!

答案:

```#include #include using namespace std;int count(vector>& matrix, int i, int j) int count = 0;if (i > 0 && matrix[i - 1][j] == 'A') count++;if (i < matrix.size() - 1 && matrix[i + 1][j] == 'A') count++;if (j > 0 && matrix[i][j - 1] == 'A') count++;if (j < matrix[0].size() - 1 && matrix[i][j + 1] == 'A') count++;return count;int main() int N;cin >> N;vector> matrix(N, vector(N));for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {cin >> matrix[i][j];}}int maxCount = 0;for (int i = 0; i < N; i++) {for (int j = 0; j < N; j++) {if (matrix[i][j] == 'B') {int count = count(matrix, i, j) + 1;maxCount = max(maxCount, count);}}}cout << maxCount << endl;return 0;```

解析:

【喵呜刷题小喵解析】:
本题可以通过模拟的方式来解决。首先,我们需要读入矩阵的大小N和矩阵中的每个元素。然后,我们遍历矩阵中的每个元素,当遇到B面的卡片时,计算翻转该卡片后能够连接的A面卡片的最大数量,并更新最大数量。具体计算的方式是通过判断该卡片上、下、左、右四个方向的卡片是否为A面,如果是,则数量加一。最后,输出最大数量即可。

在代码实现中,我们使用一个二维数组来表示矩阵,使用一个函数来计算某个卡片翻转后能够连接的A面卡片的数量。在主函数中,我们先读入矩阵的大小和元素,然后遍历矩阵中的每个元素,当遇到B面的卡片时,调用函数计算数量,并更新最大数量。最后,输出最大数量即可。
创作类型:
原创

本文链接:翻卡片 题目描述: 小蓝在玩翻卡片游戏,每张卡片一面写着大写字母“A”,另一面写着大写字母“B”。首

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share