Description
小林在 NOIP 比赛期间住在“新世界”酒店。和其他酒店不一样的是,这个酒店每天都有一个高能的数字 t,这个数字在楼层中是不会出现的,以 t=3 为例,则 3、13、31、33 等楼层是不存在的,楼层编号为 1,2,4,5,…所以实际上的 4 楼才是 3 楼。 已知小林预订了编号为 m 层的房间,并且当天高能数字是 t,现在他想知道房间所在的真实楼层是多少。
Input
一行两个整数 m 和 t,1≤m≤100000,0≤t≤9,保证 m 对 t 合法。
Output
一行一个整数,表示真实楼层。
Accepted Code
#include <bits/stdc++.h> using namespace std; int m,t; int f[100005]; bool judge(int a) //利用sprintf函数去判断整数a中是否含有数字t { char tmp[10]; sprintf(tmp,"%d",a); for (int i = 0; i < 10; i++) { if(tmp[i]-'0'==t) return false; } return true; } void filter () //楼层筛 { int p=1; for (int i = 1; i <=m; i++) { if(judge(i)) { f[p]=i; ++p; } if(i==m) { cout<<p-1<<endl; } } } int main() { cin>>m>>t; memset(f,0,sizeof(f)); filter(); return 0; }
解后反思
本题核心是利用sprintf函数去进行整数向字符串的转化并加以判断,考虑到数字量并不大可以使用暴力的筛法
优化思路
本题的优化思路大致是去考虑目标数字在个位上的出现情况去进行优化