【POJ No. 1019】数字序列 Number Sequence

北大OJ 题目地址

【题意】

给出单个正整数i ,编写程序以找到位于数字组S 1 , S 2 , …, Sk 序列中第i 位上的数字。每个组Sk 都由一系列正整数组成,范围为1~k ,一个接一个地写入。

序列的前80位数字如下:

11212312341234512345612345671234567812345678912345678910123456789101112345678910

【输入输出】

输入:

第1行包含一个整数t (1≤t ≤10),表示测试用例的数量。每个测试用例后都跟一行,包含单个整数i (1≤i ≤2, 147,483, 647)。

输出:

对每个测试用例,都单行输出第i 位上的数字。

【样例】

【思路分析】

在测试用例中,序列的第8位和第3位都是2:

将每个组都看作一个分块,每个组(分块)的长度都为a [i ]:当组内的每个数都由一位数字组成时,当前组的长度等于前一组的长度+1;当组内出现两位数10~99时,当前组的长度等于前一组的长度+2,以此类推。

  • 1 12 123 1234 12345 123456 1234567 12345678 123456789前一组的长度+1
  • 12345678910 1234567891011 123456789101112 …… 前一组的长度+2

a [i ]为第i 块的长度,sum[i ]为前i (包括i )块的总长度。

例如,查询第n 位上的数字,首先定位到第i 块,然后在当前块内查找具体的数k 。

k 可能是多位数,例如k =12406,如下图所示。

第pos位的数字应为k /10^(len-pos) =124,124%10=4。

【算法设计】

① 计算每一块的长度a [i ]及前i 块的总长度sum[i ]。

② 定位到第i 块,在块内查找第pos位所在的数k。

③ 数k 有可能是多位数,第pos位为k /(int)pow(10.0, len - pos)%10。

【算法实现】

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>typedef long long LL;const int maxn=40000;
LL a[maxn],sum[maxn];//a[i]为第i组的长度,sum[i]为前i(包括i)组的总长度int main(){int i,j;sum[0]=a[0]=0;for(i=1;i<maxn;i++){a[i]=a[i-1]+(int)log10((double)i)+1;sum[i]=sum[i-1]+a[i];}int t,n;scanf("%d",&t);while(t--){scanf("%d",&n);i=0;while(sum[i]<n) i++;  //确定n在第i组int pos=n-sum[i-1];  //确定n在第i组的第pos个位置int len=0,k=0;while(len<pos){k++;len+=(int)log10((double)k)+1;}printf("%d\n", k/(int)pow(10.0,len-pos)%10);}return 0 ;
}

【POJ No. 1019】数字序列 Number Sequence相关推荐

  1. 数字序列 Number Sequence

    题目描述 给出一个正整数i.编写一个程序来查找位于编号组S1S2 ... Sk序列中位置i的数字.每组Sk由一系列从1到k的正整数组成,依次写入.  例如,序列的前80位数字如下:   1121231 ...

  2. 【POJ No. 2778】DNA 序列 DNA Sequence

    [POJ No. 2778]DNA 序列 DNA Sequence 北大OJ 题目地址 [题意] DNA序列是一个只包含A.C.T和G的序列.分析DNA序列片段非常有用,若动物的DNA序列包含片段AT ...

  3. P4331 [BalticOI 2004]Sequence 数字序列(左偏树)

    P4331 [BalticOI 2004]Sequence 数字序列 给定一个序列整数a1,a2,a3,-,an−1,ana_1, a_2, a_3, \dots, a_{n - 1}, a_na1​ ...

  4. Oracle中序列(Sequence)详解

    Oracle中序列(Sequence)详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用 ...

  5. 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制

    第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...

  6. 找出数组中最长的连续数字序列(JavaScript实现)

    原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 func ...

  7. 【HDU - 5014】Number Sequence(贪心构造)

    题干: There is a special number sequence which has n+1 integers. For each number in sequence, we have ...

  8. hdu1005 Number Sequence(寻找循环节)

    主题链接: huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力打表,找循环节,可是也不是那么eas ...

  9. (22)UVM 虚拟类序列(virtual sequence)

    UVM 虚拟类序列(virtual sequence) 文章目录 UVM 虚拟类序列(virtual sequence) virtual sequence介绍 virtual存在对于sequence和 ...

最新文章

  1. vscode+MinGW+cmake设置轻量ide
  2. MySQL导数据工具对比
  3. 【消息中间件】Spring整合RabbitMQ
  4. 【C/C++高质量编程 笔记】
  5. 话说Svn与Git的区别
  6. Docker 从Dockerfile 构建镜像 :build 命令的用法
  7. 《The Art of Readable Code》学习笔记(一)
  8. mysql远程连接打不开_MySql远程连接无法打开解决办法
  9. python之单例模式
  10. 吉他即兴Solo演奏训练教程
  11. 为什么项目经理比程序员工资高?
  12. 分享一个边看视频就能边练口语的学习网站,超实用,不仅仅能学英语
  13. GPT分区是什么?如何创建GPT分区
  14. 概率论复习用 更新中
  15. 洛龙区:加快布局大数据产业
  16. 迭代器模式(实际运用比较少)
  17. laradock一些坑(长期维护)
  18. 从零开始学Java编程语言 方法得当依然能学好
  19. 基于云端的智能视频监控系统的设计与实现
  20. [C语言简明教程] 指针的进阶(下)

热门文章

  1. 2023 年用于 Python 移动应用程序开发的流行工具
  2. 2016 province java c-1 有奖竞猜
  3. iso9001认证机构哪家好
  4. 算法笔记:时间复杂度、空间复杂度 进制转化 秦九韶算法
  5. 有哪些非常好的前端网站或个人博客?
  6. Go 1.18 版本新特性详解!
  7. web网站上设置他人联系作者方式(QQ对话框和发送邮件)
  8. 判断素数———两种高效算法
  9. Vue国际区号组件开发(目前已经发布到npm)
  10. 超越图灵测试:判断机器是否在思考的现代方法