晚上兼职下班回来才有时间写题,早上根本起不来
A:
解题思路:我第一开始以为只要满足两个red以上的字母数量就行,但是过不了,后面才发现是red字符串,直接三个三个判断就行。
下面是c++代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
string s;
int r = 0,e = 0,d = 0,sum = 0;
cin >> s;
for(int i = 0;i < s.length() - 2;i++){
if(s[i] == 'r' && s[i + 1] == 'e' && s[i + 2] == 'd'){
sum++;
}
}
if(sum >= 2){
cout << "Yes";
}else{
cout << "No";
}
return 0;
}
B:
解题思路:看示例不难发现只要倒着输出数组就好,我最开始还想模拟题意进行两次翻转。
下面是c++代码:
#include<iostream>
using namespace std;
int main()
{
int n,arr[100][100];
cin >> n;
for(int i = 0;i < n;i++){
for(int j = 0;j < n;j++){
cin >> arr[i][j];
}
}
for(int i = n - 1;i >= 0;i--){
for(int j = n - 1;j >= 0;j--){
cout << arr[i][j] << " ";
}
cout << endl;
}
return 0;
}
C:
解题思路:只要判断x这个数左边或者右边是否等于y即可
下面是c++代码:
#include<iostream>
using namespace std;
int main()
{
int n,x,y,arr[200000];
cin >> n;
for(int i = 0;i < n;i++){
cin >> arr[i];
}
cin >> x >> y;
for(int i = 1;i < n - 1;i++){
if(arr[i] == x && (arr[i + 1] == y || arr[i - 1] == y)){
cout << "Yes";
return 0;
}
}
cout << "No";
return 0;
}
D:
解题思路:
遍历每一个元素的2 * 2 矩阵就好,注意遍历到n - 1行m - 1列就行,如果遍历到n行或者m列,那么就没有2 * 2矩阵了,在判断每个2 * 2矩阵里y o u 三个字母数量最小值是否为1就行。
下面是c++代码:
#include<iostream>
using namespace std;
char arr[1000][1000];
int main()
{
int n,m,y = 0,o = 0,u = 0,sum = 0;
cin >> n >> m;
for(int i = 0;i < n;i++){
for(int j = 0;j < m;j++){
cin >> arr[i][j];
}
}
for(int i = 0;i < n - 1;i++){
for(int j = 0;j < m - 1 ;j++){
y = 0,o = 0,u = 0;
for(int k = i;k < i + 2;k++){
for(int f = j;f < j + 2;f++){
if(arr[k][f] == 'y'){
y++;
}else if(arr[k][f] == 'o'){
o++;
}else if(arr[k][f] == 'u'){
u++;
}
}
}
if(min(min(y,o),u) == 1){
sum++;
}
}
}
cout << sum;
return 0;
}
E:
解题思路:
定义初始长度为1,找到稳定数组就加一,不是就重新赋值为1,将每一次的稳定子数组长度与Max比较找最大值。
下面是c++代码:
#include<iostream>
using namespace std;
int main()
{
int n,arr[100000],Max = 0,sum = 1;
cin >> n;
for(int i = 0;i < n;i++){
cin >> arr[i];
}
for(int i = 1;i < n;i++){
if(abs(arr[i] - arr[i - 1]) <= 1){
sum++;
Max = max(Max,sum);
} else{
sum = 1;
}
}
cout << Max;
return 0;
}