Poj 1019 Number Sequence( 数据分析和操作)
一、题目大意
有这样一个序列包含S1,S2,S3...SK,每一个Si包括整数1到 i。求在这个序列中给定的整数n为下标的数。
例如,前80位为11212312341234512345612345671234567812345678912345678910123456789101112345678910,第8位为2.
二、题解
动手做这道题之前要了解所求的是第n位而不是某一个Si中的第几个数,一位数占一位,两位数占两位,三位占三位...由于每一组都比前一组多一个数,如果这个数是一位数,则该组数的位数比前一组多1,如果这个数是两位数,则比前一组多2,三位数则多3.这个可以用公式a[i] = a[i-1] +(int)log10((double)i) + 1;表示。我们可以用打表的方法,在求结果之前先打表,用a[i]表示第i组所含的位数,s[i]表示前i组所含的位数。对于每一个给定的位数,先求出它处在哪一个组,然后再求位数。参考POJ
1019 Number Sequence C++版
三、java代码
import java.util.*;
public class Main {
static long a[]=new long[31270];//记录每一组的长度
static long s[]=new long[31270];//记录总长度
/* 打表 */
static void reset(){
int i;
a[1] = 1;
s[1] = 1;
for(i = 2; i < 31270; i++){
/* 每一组数字都比上一组长 (int)log10((double)i) + 1 */
a[i] = a[i-1] + (int)Math.log10((double)i) + 1;
s[i] = s[i-1] + a[i];
}
}
static int work(int n){ /* 计算 */
int i = 1;
int length = 0;
/* 找到 n 所在的组 */
while (s[i] < n) i++;
/* n 在该组的下标 */
long pos = n - s[i-1];
/* length: n指向的数字的最后一位的下标 */
//找到i
for (i = 1; length < pos; i++){
length += (int)Math.log10((double)i) + 1;
}
//i比所求的i多1
/* 除以10^(length - pos)去掉所求位后面的数字然后取余 */
/* i: n指向的数字 + 1 */
//
return ((i-1) / (int)Math.pow((double)10, length - pos)) % 10;
}
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int t;
int n;
reset();
t=sc.nextInt();
while(t--!=0)
{
n=sc.nextInt();
System.out.println(work(n));
}
}
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
Poj 1019 Number Sequence( 数据分析和操作)的更多相关文章
- poj 1019 Number Sequence 【组合数学+数字x的位宽函数】
题目地址:http://poj.org/problem?id=1019 Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total ...
- POJ 1019 Number Sequence
找规律,先找属于第几个循环,再找属于第几个数的第几位...... Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submi ...
- POJ 1019 Number Sequence 解读
这是一个看似简单,其实很难受. 本来我想发挥它的标题轨道基础.没想到反被消遣-_-|||. 看它在个人基础上,良好的数学就干脆点,但由于过于频繁,需求将被纳入全,因此,应该难度4星以上. 方法就是直接 ...
- POJ - 1019 Number Sequence (思维)
https://vjudge.net/problem/POJ-1019 题意 给一串1 12 123 1234 12345 123456 1234567 12345678 123456789 1234 ...
- PKU 1019 Number Sequence(模拟,思维)
题目 以下思路参考自discuss:http://poj.org/showmessage?message_id=176353 /*我的思路: 1.将长串数分成一个个部分,每个部分是从1到x的无重复的数 ...
- POJ 1019:Number Sequence 二分查找
Number Sequence Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 36013 Accepted: 10409 ...
- HDU 1005 Number Sequence
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu 1005:Number Sequence(水题)
Number Sequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- hdu1005 Number Sequence(寻找循环节)
主题链接: pid=1005">huangjing 题意: 就是给了一个公式,然后求出第n项是多少... 思路: 题目中n的范围实在是太大,所以肯定直接递推肯定会超时,所以想到的是暴力 ...
随机推荐
- POJ 1518 A Round Peg in a Ground Hole【计算几何=_=你值得一虐】
链接: http://poj.org/problem?id=1584 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22013#probl ...
- C语言之基本算法12—谁是冠军
/* ================================================================== 题目:甲乙丙丁四人猜A,B,C,D,E,F6个人谁是冠军,甲 ...
- 函数创建XML文件
REPORT YTST_XML_14. *----------------------------------------------------------------------* * PANT ...
- php函数指定默认值的方法
发布:JB02 来源:脚本学堂 [大 中 小] 本文介绍下,在php编程中,指定函数的默认值的方法,分享二个例子,供大家学习参考下.本文转自:http://www.jbxue.com/ar ...
- samsung n143 brightness on linux mint
sudo vi /etc/default/grub Find the line which says GRUB_CMDLINE_LINUX="" enter acpi_backli ...
- [原创]java WEB学习笔记14:JSP的9 个隐含对象 及 JSP 的基本语法
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
- 左侧图片 右侧块的实现方法---解决3像素bug的一种解决方案,不用浮动用绝对定位和margin-left
google的实现方式是: <div class="mw"> <a href="/" id="mlogo"> &l ...
- 第一篇 dom
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- HDU2612 -暑假集训-搜索进阶N
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/N这两天总是因为一些小错误耽误时间,我希望自己可以细心点.珍惜 ...
- In a Web Application and Mobile (hybrid), how to know which this platform running?
needed depending on the platform to change the CSS to suit the size of the font. for example the DbG ...