CCYL Membership Activist

题解 P1898 【缘分计算】

2020-10-08 11:50:56


这可能是全谷实用价值最高的一道题

好了,这题本身很基础,基本没有难度,全部模拟,数据规模也不大。(简单到蒟蒻楼主基本没有调试就AC了。)
本来计划用循环做,但是后来发现这东西代码极长难以调试,于是毅然转向了另一种做法:

递 归

做法非常基础,比搜索什么的简单多了:

//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的名字,来测测你们的缘分吧!
幸福都是你们的(猛男哭泣
另:如果测出你和你兄弟有什么奇♂妙的缘分,本人概不负责