爱奇艺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; }