hihoCoder1649:漏写的数字(模拟)

题解:

前两个数字可能是两位,可能是三位,也可能是四位。
如果是两位即是两个一位数组成,三位便是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;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值