第一题:得分
有2N张扑克牌,每张牌印有一个数字,数字范围[1,2N],且每张牌的数字都不相同。
FJ拿了其中的N张牌,Bessie拿剩下的N张牌,然后他们共进行N轮对打,每一轮对打就是各自出一张牌,数字大的一方获得1分。
已知FJ第i轮出的牌是f[i],Bessie第i轮出的牌是b[i]。
求FJ最后的得分。
【输入格式】
一行,1个整数N。1 <= N <= 50。
第二行,N个整数,第i个整数是f[i]。
第三行,N个整数,第i个整数是b[i]。
【输出格式】
一个正整数。
【输入样例】
2 1 3 4 2
【输出样例】
1
解题思路:使用数组接收输入,然后比较两个数组数据的大小,然后使用标记变量记录结果即可。附代码如下:
#include <bits/stdc++.h>
using namespace std;
int n,f[55],b[55],ans;
int main(){
cin>>n;
for(int i=0;i<n;i++)
cin>>f[i];
for(int i=0;i<n;i++)
cin>>b[i];
for(int i=0;i<n;i++)
if(f[i]>b[i])
ans++;
cout<<ans;
return 0;
}
第二题:单元格
Cat Taro有一个N行和N列的正方形网格。网格的每个单元格都涂成黑色或白色。
Taro想要选择一段连续的单元格,这段单元格必须位于同一列中并且有相同的颜色。
求他可以选择的最大数量的单元格。
【输入格式】
第一行,一个整数N。1 <= N <= 50。
接下来是N行N列的网格。每个各自要么是白色 'W', 要么是黑色 'B’。
【输出格式】
一个整数。
【输入样例】
4 BWBW BBWB WWWB BWWW
【输出样例】
3
解题思路:首先,先分析输入/输出样例,输出样例为3,表示最长的连续同色格子是第三列的3个W。这题考察二维数组的搜索,定义二维字符数组接收输入。这题的关键点是,在使用二重循环搜索二维数组时,需要先改变二维数组的行坐标,再改变二维数组的列坐标(先移动行坐标再移动列坐标)。而在搜索的过程中,需要考虑如果位于两种方格的交界处,则需要将计数器变量重置为1,重新统计结果。附代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,ans;
char a[55][55];
int main(){
cin>>n;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
cin>>a[i][j];
for(int j=0;j<n;j++)
{
int t=1;
for(int i=0;i<n-1;i++)
if(a[i][j]==a[i+1][j])
t++;
else
ans=max(t,ans),t=1;//如果出现两种颜色交界,需要重置计数变量
ans=max(t,ans);
}
cout<<ans;
return 0;
}
第三题:字符串排序
给出一个字符串数组Strin