hihoCoder1649:漏写的数字(模拟)

来源:互联网 发布:京东商城seo解决方案 编辑:程序博客网 时间:2024/05/29 16:34

题解:

前两个数字可能是两位,可能是三位,也可能是四位。
如果是两位即是两个一位数组成,三位便是910 或9 11
四位便是两个两位数。
因为一位数的判断和十位数判断不同,个位数判断的话是判断一个字符,十位数判断要判断两个字符,所以要将两种情况分开来。

所以我们只需判断前四个字符是三种类型中的哪一个就可以判断从十位数开始++,还是从个位数开始++。

其实我们只要判断是否是两个两位数即可,如果不是即为个位数开始。 可以设a = s[0], b = s[1] , c = s[2], d = s[3]。如果不足位数,可以将变量致-1当做不存在。

int cc = c*10+d;int aa = a*10+b;

如果 cc - aa == 1 || cc - aa == 2 那么就可以断定是两个两位数。
例如 2324或 2325。

注意在一位数++的时候遇到10要转变成两位数的形式。

具体代码:

#include <iostream>#include <string>#include <cstring>using namespace std;string s;void ten(int k, int a){    for(int i = k; i < s.length(); i += 2){        int tmp = 10*(s[i]-'0')+s[i+1]-'0';        if(a != tmp){            cout << a << endl;            return;        }        a++;    }}void single(int k, int a){    for(int i = k; i < s.length(); ++i){        int tmp = s[i]-'0';        if(a != tmp){            cout << a << endl;            return;        }        a++;        if(a == 10){            ten(i+1,10);            break;        }    }}int main(){    cin >> s;    int a = s[0] -'0';    int b = s[1]- '0';    int c = -1;    int d = -1;    if(s.length() > 3){        c = s[2]-'0';    }    if(s.length() > 4){        d = s[3] -'0';    }    int cc = c*10+d;    int aa = a*10+b;    if(cc - aa == 1 || cc - aa == 2 )        ten(0, aa);    else        single(0, a);    return 0;}
原创粉丝点击