题解 P1898 【缘分计算】
Enterpr1se
2020-10-08 11:50:56
# ~~这可能是全谷实用价值最高的一道题~~
好了,这题本身很基础,基本没有难度,全部模拟,数据规模也不大。(简单到蒟蒻楼主基本没有调试就AC了。)
本来计划用循环做,但是后来发现这东西**代码极长**,**难以调试**,于是毅然转向了另一种做法:
## 递 归
做法非常基础,比搜索什么的简单多了:
```cpp
//lg-1889
#include<iostream>
#include<string>
using namespace std;
short st,l;
string name,num,ans;
string strint(short a){//将int转化为string
string ret;
char dig;
while(a!=0){
dig=(a%10)+48;
ret=dig+ret;
a/=10;
}
return ret;
}
string sht(string a){//shorten的缩写,但是看着有点奇怪(大雾
if(a.length()==2 || a=="100") return a;//若得出两位或100则直接返回
short len=a.length();
string ret;
for(int i=0;i<len-1;++i){
ret+=((a[i]+a[i+1]-96)%10)+48;//第i位数字形式+第(i+1)位数字形式的和模10,转换为字符
}
return sht(ret);//递归
}
int main(){
ios::sync_with_stdio(false);//输入加速の黑科技
cin>>name>>st;
l=name.length();
for(int i=0;i<l;++i) num+=strint(st+name[i]-65);
ans=sht(num);
if(ans[0]=='0') cout<<ans[1];//判断是否有前置0
else cout<<ans;
return 0;
}
```
好了,快输入你和那个TA的名字,来测测你们的缘分吧!
~~幸福都是你们的(猛男哭泣~~
~~另:如果测出你和你兄弟有什么奇♂妙的缘分,本人概不负责~~