爱奇艺2017秋招笔试(C++智能设备方向)

虽然有方向,但是好像题目都是随机题库抽取。

选择题都很基础。。。挖坑,待更新

编程:

一、 奇异数:

如果一个数字满足以下条件,我们就称它为奇异数:

1.   这个数字至少有两位

2. 这个数的最低两位是相同的

比如: 1488是一个奇异数,而3、 112 不是。

牛牛现在给出一个区间[L, R], 让你计算出在区间内有多少个奇异数

输入描述:

输入包括两个正整数L和R(1<= L <= R <= 10^12),以空格分割。

输出描述:

输出一个正整数,即区间内奇异数的个数。

思路:最直接的想法是暴力,直接对区间内的每个数进行判断,不过只能

通过30%的case。所以要想办法优化,

参考别人的一种想法是:只对一个数进行判断。即o(1)的时间,这就要求找出

奇异数的规律。首先,以100为分界线,一部分分为:一个数除100后,有多少个100,就乘以10,因为

100之内奇异数有10个。

然后另一部分 是模100后的余数,要进行判断。

比如1134这个数,  1134 /100 = 11,说明有  11个100,   11*10 = 110,

                               而 1134 % 100 = 34.     34 又 分为两部分   11 、22  和 34

贴代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
ll computer(ll n){
    ll temp = n;
    ll count = 0;
    if (temp < 101){
        temp = (n / 10) % 10;
        count = temp - 1;
        if (n % 10 >= temp){
            count ++;
        }
    }
    return count;
}
ll qiyi(ll n){
    return computer(n % 100) + 10*(n / 100);
}

int main() {
    ll L,R;
    cin >> L >> R;
    cout << (qiyi(R)-qiyi(L-1))<<endl;
    return 0;
}

  

原文地址:https://www.cnblogs.com/simplepaul/p/7503497.html