大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
杭州人称那些傻乎乎粘嗒嗒的人为 62(音:laoer)。
杭州交通管理局经常会扩充一些的士车牌照,新近出来一个好消息,以后上牌照,不再含有不吉利的数字了,这样一来,就可以消除个别的士司机和乘客的心理障碍,更安全地服务大众。
不吉利的数字为所有含有 4 或 62 的号码。例如:62315,73418,88914 都属于不吉利号码。但是,61152 虽然含有 6 和 2,但不是 连号,所以不属于不吉利数字之列。
你的任务是,对于每次给出的一个牌照号区间 [n,m],推断出交管局今后又要实际上给多少辆新的士车上牌照了。
输入格式
输入包含多组测试数据,每组数据占一行。
每组数据包含一个整数对 n 和 m。
当输入一行为“0 0”时,表示输入结束。
输出格式
对于每个整数对,输出一个不含有不吉利数字的统计个数,该数值占一行位置。
数据范围
1≤n≤m≤109
输入样例:
1 100
0 0
输出样例:
80
#include<bits/stdc++.h>
using namespace std;
const int N = 12;
int f[N][10];
void init(){
for(int i = 0;i < 10;i ++)f[1][i] ++;
f[1][4] = 0;
for(int i = 2;i < N;i ++){
for(int j = 0;j < 10;j ++){
if(j == 4)continue;
for(int k = 0;k < 10;k ++){
if(j == 6 && k == 2 || k == 4)continue;
f[i][j] += f[i - 1][k];
}
}
}
}
int dp(int n){
if(!n)return 1;
vector<int>nums;
while(n)nums.push_back(n % 10),n /= 10;
int res = 0,last = 0;
for(int i = nums.size() - 1;i >= 0;i --){
int x = nums[i];
for(int j = 0;j < x;j ++){
if(j == 4)continue;
if(last == 6 && j == 2)continue;
res += f[i + 1][j];
}
if(last == 6 && x == 2 || x == 4)break;
last = x;
if(!i)res ++;
}
return res;
}
int main(){
int l,r;
init();
while(cin>>l>>r,l != 0 || r != 0){
cout<<(dp(r) - dp(l - 1))<<endl;
}
return 0;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/168580.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...