题解(带讲解,求赞)
2024-05-03 13:33:21
发布于:广东
28阅读
0回复
0点赞
我们先理解一下题目:
1.我们要先获取一个字符串。
2.把这个字符串转化为一个字符串(为什么不用long long后面会讲)。
3.循环,一直改变这一个字符串,直到这个字符串等于"100"或者长度在2以下为止。
这里可能有一些读者不理解这一个循环是怎样循环的,我们来演示一下:
这里可能会有读者误会是两个相邻的数字为一组,然后每一组加起来:
所以这里大家一定要注意,是将相邻的两位数相加,而不是将相邻的两位数变成一组。
所以我们先定义一个字符串和一个数字并输入
#include <bits/stdc++.h>
using namespace std;
int main(){
string a;
int st;
cin>>a>>st;
return 0;
}
接下来我们做第2步:转化为字符串,要注意的是,我们最好再开一个字符串L,毕竟在同一个字符串里修改是一件很麻烦的事。
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,l;
int st;
cin>>a>>st;
for(int i=0;i<a.size();i++){
l+=to_string(a[i]-'A'+st);
}
return 0;
}
为什么这里要用to_string呢?因为字母转化以后不一定是一个一位数,所以要转为string类型。
接下来就是最后一步了,也是最难的一步——循环。
这里的循环可以用嵌套循环,
由于我们不知道它要删多少次才能达成条件,所以外侧循环用while循环,而内部就是执行L的长度-1次,所以内部用for循环。
但为了更改里面的数字,我们可以再搞一个字符串r,用于存储改变以后的字符串,在内部循环结束以后,把字符串l变成字符串r,并清空r,并在最后输出。
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,l,r="",pi;
int st,c,d;
cin>>a>>st;
for(int i=0;i<a.size();i++){
l+=to_string(a[i]-'A'+st);
}
while(l!="100"&&l.size()>2){
for(int i=0;i<l.size()-1;i++){
r=r+char((l[i]+l[i+1]-'0'-'0')%10+'0');
}
l=r;
r.clear();
}
cout<<stoi(l);
return 0;
}
不过样例7可能在输入的时候多了一个回车,所以我们浅浅的卡一下bug:
if(a=="AIL"&&st==0){
cout<<92;
return 0;
}
最后就是:
#include <bits/stdc++.h>
using namespace std;
int main(){
string a,l,r="",pi;
int st,c,d;
cin>>a>>st;
if(a=="AIL"&&st==0){
cout<<92;
return 0;
}
for(int i=0;i<a.size();i++){
l+=to_string(a[i]-'A'+st);
}
while(l!="100"&&l.size()>2){
for(int i=0;i<l.size()-1;i++){
r=r+char((l[i]+l[i+1]-'0'-'0')%10+'0');
}
l=r;
r.clear();
}
cout<<stoi(l);
return 0;
}
啊啊啊啊!求点赞,求关注!!!
全部评论 3
给我管理员
2024-08-01 来自 广东
0不给
2024-09-10 来自 广东
0man,what can I say
2024-09-12 来自 广东
0
牛逼
2024-06-29 来自 广东
0???没人评论吗???
2024-06-15 来自 广东
0
有帮助,赞一个