【POJ No. 1019】数字序列 Number Sequence
【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相关推荐
- 数字序列 Number Sequence
题目描述 给出一个正整数i.编写一个程序来查找位于编号组S1S2 ... Sk序列中位置i的数字.每组Sk由一系列从1到k的正整数组成,依次写入. 例如,序列的前80位数字如下: 1121231 ...
- 【POJ No. 2778】DNA 序列 DNA Sequence
[POJ No. 2778]DNA 序列 DNA Sequence 北大OJ 题目地址 [题意] DNA序列是一个只包含A.C.T和G的序列.分析DNA序列片段非常有用,若动物的DNA序列包含片段AT ...
- 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 ...
- Oracle中序列(Sequence)详解
Oracle中序列(Sequence)详解 一 序列定义 序列(SEQUENCE)是序列号生成器,可以为表中的行自动生成序列号,产生一组等间隔的数值(类型为数字).不占用磁盘空间,占用内存. 其主要用 ...
- 吴恩达deeplearning.ai系列课程笔记+编程作业(15)序列模型(Sequence Models)-第三周 序列模型和注意力机制
第五门课 序列模型(Sequence Models) 第三周 序列模型和注意力机制(Sequence models & Attention mechanism) 文章目录 第五门课 序列模型( ...
- 找出数组中最长的连续数字序列(JavaScript实现)
原始题目: 给定一个无序的整数序列, 找最长的连续数字序列. 例如: 给定[100, 4, 200, 1, 3, 2], 最长的连续数字序列是[1, 2, 3, 4]. 小菜给出的解法: 1 func ...
- 【HDU - 5014】Number Sequence(贪心构造)
题干: There is a special number sequence which has n+1 integers. For each number in sequence, we have ...
- hdu1005 Number Sequence(寻找循环节)
主题链接: huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力打表,找循环节,可是也不是那么eas ...
- (22)UVM 虚拟类序列(virtual sequence)
UVM 虚拟类序列(virtual sequence) 文章目录 UVM 虚拟类序列(virtual sequence) virtual sequence介绍 virtual存在对于sequence和 ...
最新文章
- vscode+MinGW+cmake设置轻量ide
- MySQL导数据工具对比
- 【消息中间件】Spring整合RabbitMQ
- 【C/C++高质量编程 笔记】
- 话说Svn与Git的区别
- Docker 从Dockerfile 构建镜像 :build 命令的用法
- 《The Art of Readable Code》学习笔记(一)
- mysql远程连接打不开_MySql远程连接无法打开解决办法
- python之单例模式
- 吉他即兴Solo演奏训练教程
- 为什么项目经理比程序员工资高?
- 分享一个边看视频就能边练口语的学习网站,超实用,不仅仅能学英语
- GPT分区是什么?如何创建GPT分区
- 概率论复习用 更新中
- 洛龙区:加快布局大数据产业
- 迭代器模式(实际运用比较少)
- laradock一些坑(长期维护)
- 从零开始学Java编程语言 方法得当依然能学好
- 基于云端的智能视频监控系统的设计与实现
- [C语言简明教程] 指针的进阶(下)