本文共 4770 字,大约阅读时间需要 15 分钟。
A
题目大意
模拟 我们平常写代码的++x 和- -x 或者x++ x- -
题解
容易发现,每个字符串的区别就在于第2位,要么 + ,要么 - 只需要判断一下就好了
#includeusing namespace std;int n;int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>n){ int ans=0; string s; for(int i=0;i >s; if(s[1]=='+') ++ans; if(s[1]=='-') --ans; } cout< <
B
题目大意
字符串长度超过10个的,中间部分用中间部分长度代替
题解
对于输入的字符串,进行判断,长度大于10,那么就处理一下,中间长度等于总长度-2 最后将数字转化为字符串 (用stringstream就可以了)
#includeusing namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; string s; string res; for(int i=0;i >s; res=""; int len=s.length(); if(len>10){ len-=2; res+=s[0]; stringstream ss; ss< >s2; res+=s2; res+=s[len+1]; cout< <
C
题目大意
在一个数组中找到比给定值大的个数 不包括0
题解
水题,一层for循环解决
#includeusing namespace std;const int maxn=100+5;int a[maxn];int n,m;int main(){ ios::sync_with_stdio(false); cin.tie(0); while(cin>>n>>m){ for(int i=1;i<=n;i++) cin>>a[i]; int res=0; for(int i=1;i<=n;i++){ if(a[i]>=a[m]&&a[i]) ++res; } cout< <
D
题目大意
将所有字母变为小写字母后,然后删除掉相应特殊字符,最后输出时在每个字母前加.
题解
题目意思很容易看懂,但有一个新知识:transform(s.begin(),s.end(),s.begin(),::tolower); 函数是用来将所有字母变为小写字母 把tolower变为toupper就是变成大写字母了
#includeusing namespace std;int main(){ string s; cin>>s; transform(s.begin(),s.end(),s.begin(),::tolower); int n=s.length(); for(int i=0;i
E
题目大意
比较两段字符串,大小写没限制,小于输出-1 等于输出0 大于输出1
题解
正好又用到了上题的函数,由于C++里面字符串可以按照字典序进行排序,然后题目要求大小写没限制,我们可以把它们全部变为小写字母或者大写字母都可以 然后我们直接进行比较就可以得出答案
#includeusing namespace std;int main(){ string s1,s2; cin>>s1>>s2; transform(s1.begin(),s1.end(),s1.begin(),::tolower); transform(s2.begin(),s2.end(),s2.begin(),::tolower); if(s1
F
题目大意
给你两支队伍,然后用一段字符串表示队伍的位置,两支队伍分别用0和1来表示 让你判断是否出现连续0或1 达到长度超过7 如果超过了就输出YES 否则输出NO
题解
直接遍历一遍字符串 用两个变量存0和1出现次数 只要一个出现次数超过了7次 直接输出YES 否则输出NO
#includeusing namespace std;int main(){ ios::sync_with_stdio(false); cin.tie(0); string s; cin>>s; int flag=1; int n=s.length(); int ans0=0,ans1=0; for(int i=0;i =7){ flag=0; break; } if(s[i]=='1'){ ans0=0; ans1++; } if(ans1>=7){ flag=0; break; } } if(!flag) cout<<"YES"<
G
题目大意
就是求小组个数,不存在雇佣关系,所需最小的组数其实就是树的最大深度,一棵树有多少层那就必须有多少个小组
题解
可以把他们的关系看成一棵树,去寻找树的最大深度,就可以用DSF来找,直接采用并查集方式找根节点
#includeusing namespace std;const int maxn=2000+10;int p,pre[maxn];int cnt;int dfs(int x){ if(x==pre[x]) return x; else{ cnt++; return dfs(pre[x]); }}int main(){ ios::sync_with_stdio(false); cin.tie(0); int n; cin>>n; for(int i=1;i<=n;i++) pre[i]=i; for(int i=1;i<=n;i++){ cin>>p; if(p!=-1) pre[i]=p; } int ans=-1; for(int i=1;i<=n;i++){ cnt=1; dfs(i); ans=max(ans,cnt); } cout< <
H
题目大意
求需要几个步骤使得字符串中相邻的字符不相同
题解
水题,遍历一遍即可
#includeusing namespace std;const int maxn=100+10;char s[maxn];int n;int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n; for(int i=0;i >s[i]; int ans=0; char ch; for(int i=0;i
I
题目大意
将字符串第一个字符大写
题解
小写变为大写+32即可
#includeusing namespace std;int main(){ string s; cin>>s; if(s[0]>='a'&&s[0]<='z') s[0]-=32; cout< <
J
题目大意
给出一个迷宫,’.’ 表示通路,‘#’ 表示城墙,输入的数据中,‘.’构成的已经联通,要求将k个’.‘转换成’#’,使得剩下的’.'仍然是联通的
题解
深搜,假设共有s个’.‘那么搜索得到的s-k个点必然是联通的,那么只要将剩下的’.‘转换成’#'就行了。
#includeusing namespace std;int n,m,s;const int maxn=500+10;char mp[maxn][maxn];int dx[]={ 1,0,-1,0};int dy[]={ 0,1,0,-1};bool vis[maxn][maxn];bool check(int x,int y){ if(x>=1&&x<=n&&y>=1&&y<=m&&!vis[x][y]&&mp[x][y]=='.') return true; return false;}void dfs(int x,int y){ vis[x][y]=1; for(int i=0;i<4;i++){ int xx=x+dx[i]; int yy=y+dy[i]; if(check(xx,yy)){ dfs(xx,yy); } } if(s){ s--; mp[x][y]='X'; }}int main(){ ios::sync_with_stdio(false); cin.tie(0); cin>>n>>m>>s; int px,py; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cin>>mp[i][j]; if(mp[i][j]=='.'){ px=i,py=j; } } } dfs(px,py); for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ cout<
学如逆水行舟,不进则退
转载地址:https://chocolate.blog.csdn.net/article/details/100661917 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!