寻找页码题解
首先看题目,我也不知道这一题的出处。。。。在网上找了很久也没找到。。。
题目描述
从第1页开始,页码组成的数字序列如下:123..10 11 12..99 100 101...
这串序列又被称之为连写数。给定一个 0
到 9
之中的单独一位数字 a
,请问在这串序列中,第 k
次出现 a
,是在哪一页上?以数码 1 为例,第一次出现在第 1 页,第二次出现在第 10 页,第三次和第四次都出现在第11页上。
输入格式
第一行:两个整数a和k输出格式
输出格式
单个整数表示答案
数据范围
样例数据
输入: 15
输出: 12
输入: 223
输出: 120
解析
这是一道基础的题,首先要会判断一个数的位数,如果不会的话就上打表大法:
if(1<n&&n<10) len=1; if(10<n&&n<100) len=2; if(100<n&&n<1000) len=3; if(1000<n&&n<10000) len=4; if(10000<n&&n<100000) len=5; ...
但是可以这样写,当 n 不为 0 时,每次记录长度并删除一位:
while(n/*>0*/) { len++; n=n/10; }
接着要推测循环的次数,也就是出现次数的范围,我这里是用
参考代码:
#include<bits/stdc++.h> using namespace std; int a,k; int pd(int n) { int long_=1; int m=n; int ans=0; while(n>0) { int q=n%10; if(q==a) { ans++; } n=n/10; } return ans; } int main() { scanf("%d%d",&a,&k); int i = 1; int num=0; for(i = 1;i<=k*k;i++) { int cut=pd(i); num+=cut; if(num>=k) { cout<<i; break; } } return 0; //华丽结束 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)