题目描述

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

输入

输入文件的第一行包含一个整数t(1≤t≤10),即测试用例的数量,每个测试用例后跟一行。测试用例的行包含单个整数i(1≤i≤2147483647)

输出

每个测试用例应该有一个输出行,其中包含位于位置i的数字。

样例输入

2
8
3

样例输出

2
2

思路:模拟分组,把 1 看做第 1 组,12 看做第 2 组,123 看做第 3 组……那么第 i 组就是存放数字序列为  [ 1,i ] 的正整数,但第 i 组的长度不一定是 i

已知输入查找第 n 个位的 n 的范围为 (1 ≤ n ≤ 2147483647 ),那么至少要有 31268 个组才能使得数字序列达到有第 2147483647 位

注意:2147483647 刚好是 int 的正整数最大极限值( ),所以对于 n 用 int 定义就足矣。但是 pos [ 31268 ] 存在超过 2147483647 的位数,因此要用 unsigned 或 long long 之类的去定义 pos [ ]

#include <iostream>
#include <cmath>
using namespace std;
int n;
long long len[40000];//记录第i个串的长度
long long pos[40000];//记录第i个串开始位置的下标
int large[1200000];//记录最长的串
int main()
{len[1]=pos[1]=1;for(int i=2;i<40000;i++){len[i]=len[i-1]+(int)log10(i*1.0)+1;/*(int)log10(i*1.0)+1是求串 1 12 123 ....112...9.10.11....后序列比前序列多出的数的位数,超过10以后会多一位或者更多,所以用log10()求解*/ pos[i]=pos[i-1]+len[i-1];}int  cnt=1;for(int i=1;i<40000;i++)//找到40000的目的是 找到最大序列(上文的串) {int bit[100];int k=i,num=0;while(k)/*将k取余放入数组bit中,但此时序列表示数的所在的位置是反着的,故用large转置回来 */ {bit[num++]=k%10;k/=10;}while(num--){large[cnt++]=bit[num];}}int t;cin>>t;while(t--){cin>>n;int i;for(i=1;i<40000;i++){if(pos[i]>=n)//找到所求第n个数在第几个序列里 break; }if(pos[i]==n)//如果那个数刚好是序列开头的第一位数输出1 cout<<1<<endl;elsecout<<large[n-pos[i-1]+1]<<endl;//否则输出的数 从large中找 } return 0;} 

数字序列 Number Sequence相关推荐

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

    [POJ No. 1019]数字序列 Number Sequence 北大OJ 题目地址 [题意] 给出单个正整数i ,编写程序以找到位于数字组S 1 , S 2 , -, Sk 序列中第i 位上的数 ...

  2. 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​ ...

  3. Oracle中序列(Sequence)详解

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

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

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

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

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

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

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

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

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

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

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

  9. 第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks)

    第五门课 序列模型(Sequence Models) 第一周 循环序列模型(Recurrent Neural Networks) 文章目录 第五门课 序列模型(Sequence Models) 第一周 ...

最新文章

  1. 2017年2月18日 K-means
  2. 解决 Let’s Encrypt SSL 证书配置错误
  3. 你若安好,便是晴天。
  4. 【CSON原创】HTML5字体动态粒子效果发布
  5. 香港计算机mphil申请成功案例,香港稀有CS MPhil录取:申请也有起死回生的惊喜...
  6. 接口测试工具--apipost预/后执行脚本
  7. 06.Android之消息机制问题
  8. 12篇学通C#网络编程——第一篇 基础之进程线程(转)
  9. cpc cpa cpm cps 什么意思
  10. android 中文转首字母,Android开发 - 汉字转拼音首字母
  11. 连接共享打印机时提示无法访问计算机,共享打印机无法连接,教您共享打印机无法连接怎么办...
  12. 忆黄霑(文/林青霞)
  13. POJ2248-Addition Chains-经典搜索题详解优化
  14. 专注低功耗蓝牙 创新微MinewSemi致力“将世界带入物联网时代”
  15. iOS 优化 - 瘦身
  16. 软件交付过程的思考与总结
  17. MMrotate自定义数据集训练与验证格式转换脚本
  18. python 如何获取百度热点内容
  19. 查看附件html,附件查看器
  20. ubuntu22.04系统cp2102驱动USB端口占用问题解决

热门文章

  1. VS2017环境下GMap的学习及开发(一)
  2. JavaWeb开发了解
  3. 清空数据库所有表数据
  4. Golang panic:WaitGroup is reused before previous Wait has returned
  5. Linux基本的常用命令
  6. 单片机双字节数乘法运算实验_单片机入门——单片机的基本构成及工作原理(1)...
  7. 关于 ideaIU 20191.2的基本安装教程及破解
  8. linux运维自动化脚本,linux运维自动化shell脚本小工具
  9. iOS 自定义导航栏 NavigationBar
  10. Java千百问_07JVM架构(015)_XmnXmsXmxXss有什么区别