寻找页码题解

首先看题目,我也不知道这一题的出处。。。。在网上找了很久也没找到。。。

题目描述

从第1页开始,页码组成的数字序列如下:123..10 11 12..99 100 101...

这串序列又被称之为连写数。给定一个 09 之中的单独一位数字 a,请问在这串序列中,第 k 次出现 a ,是在哪一页上?以数码 1 为例,第一次出现在第 1 页,第二次出现在第 10 页,第三次和第四次都出现在第11页上。

输入格式

第一行:两个整数a和k输出格式

输出格式

单个整数表示答案

数据范围

0a9
1k100

样例数据

输入: 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;
}

接着要推测循环的次数,也就是出现次数的范围,我这里是用 k2 ,因为这样能在保证效率的同时够使用,也可以用其他的,最后累加答案并输出即可。

参考代码:

#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; //华丽结束
}
posted @   全角的!与半角的!  阅读(42)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示