A A+B=B
知识点:映射、模运算
思路:题目将大写字母ABCDEFGHIJ映射为0123456789,于是我们将两个字符转换成对应的数字相加求和(也就是减去’A‘字母即可),和除10得到和的十位数,和模10得到和的个位数,若十位数等于0,就映射为字符串(字符串为ABCDEFGHIJ)对应的个位的位置,否则映射字符串对应的十位和个位数字。
#include<bits/stdc++.h> using namespace std; string s="ABCDEFGHIJ"; char a,b; int main(){ cin>>a>>b; int sum=a-'A'+b-'A'; int ge=sum%10,shi=sum/10; if(shi==0){ cout<<s[ge]; }else{ cout<<s[shi]<<s[ge]; } return 0; }
B 联合豆包
知识点:循环、max()函数、累加器
思路:对于每次的输入,求得最大值然后进行累加,最后进行输出。
#include<bits/stdc++.h> using namespace std; long long n,x,y,s; int main(){ cin>>n; for(int i=1;i<=n;i++){ cin>>x>>y; s+=max(x,y); }cout<<s; return 0; }
C 环状字符串
知识点:字符串、字符串的追加
思路:即然是到尾了就返回到头,那就直接点,将字符串在本身的基础上连续追加m(m为最终需要的长度)次,最后再从n-1(n为从第几个位置开始)的位置输出到n+m-2的位置即可。
方法1:
#include<bits/stdc++.h> using namespace std; string s,t; int n,m;//从n个开始,按环上顺序的m个字符 int main(){ cin>>s>>n>>m; t=s; for(int i=1;i<=m;i++)s+=t; for(int i=n-1;i<n+m-1;i++){ cout<<s[i]; } return 0; }
方法 2
#include <bits/stdc++.h> using namespace std; int main(){ string s,s1; int n,m; cin>>s>>n>>m; for(int i=n-1;i<=n+m-2;i++){ s1+=s[i%s.size()]; } cout<<s1; return 0; }
D 三子棋
- 知识点:二维数组、坐标轴
思路:对于每个位置进行判断,若该位置未落棋子并且该位置的上下左右,左上右下,左下右上的位置均在棋盘内,那么看看与之相邻的两个位置是否已经有棋子了,类型分为两种,其一是该棋子作为三个棋子的中间位置;其二是该棋子作为三个棋子的一个边缘位置;两者满足其一,给累加器增加一个即可。
#include <bits/stdc++.h> using namespace std; char a[55][55]; int n,m,cnt; int main(){ cin>>n>>m; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>a[i][j]; } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ //横的,分为左方和右方两个 左方和右方分别一个 if(a[i][j]=='.'&& a[i][j-1]=='#'&&a[i][j-2]=='#'){ cnt++; }else if(a[i][j]=='.'&& a[i][j+1]=='#'&&a[i][j+2]=='#'){ cnt++; }else if(a[i][j]=='.'&& a[i][j-1]=='#'&&a[i][j+1]=='#'){ cnt++; } //竖的,分为上边和下边两个、上边和下边分别一个 else if(a[i][j]=='.'&& a[i-1][j]=='#'&&a[i-2][j]=='#'){ cnt++; }else if(a[i][j]=='.'&& a[i+1][j]=='#'&&a[i+2][j]=='#'){ cnt++; }else if(a[i][j]=='.'&& a[i-1][j]=='#'&&a[i+1][j]=='#'){ cnt++; } //左对角线,分为左上方两个格、左上一个、右下一个、右下两个格 else if(a[i][j]=='.'&&a[i-1][j-1]=='#'&&a[i-2][j-2]=='#'){ cnt++; } else if(a[i][j]=='.'&&a[i-1][j-1]=='#'&&a[i+1][j+1]=='#'){ cnt++; } else if(a[i][j]=='.'&&a[i+1][j+1]=='#'&&a[i+2][j+2]=='#'){ cnt++; } //右对角线,分为右上方两个格、右上左下分别一个、左下方两个格 else if(a[i][j]=='.'&&a[i-1][j+1]=='#'&&a[i-2][j+2]=='#'){ cnt++; } else if(a[i][j]=='.'&&a[i-1][j+1]=='#'&&a[i+1][j-1]=='#'){ cnt++; } else if(a[i][j]=='.'&&a[i+1][j-1]=='#'&&a[i+2][j-2]=='#'){ cnt++; } } } cout<<cnt; return 0; }