[POJ 1019]Number Sequence(递推)
2014-09-26 16:42
323 查看
题目:http://poj.org/problem?id=1019
题目大意:给出一个数字序列1,12,123,1234,12345....,求这个序列中的第n位数字
思路:先确定第n位数字所在的子序列(1234...n),然后确定这个数字在这个子序列中的位置,进而推出它对应的数
题目大意:给出一个数字序列1,12,123,1234,12345....,求这个序列中的第n位数字
思路:先确定第n位数字所在的子序列(1234...n),然后确定这个数字在这个子序列中的位置,进而推出它对应的数
/* 对于一个数字i,易知它的位数为log10(i)+1 令a1=1,a2=2,...,an=n,a1a2a3...an的长度为len 则有递推式len[i]=len[i-1]+log10(i)+1 */ #include <iostream> #include <stdio.h> #include <stdlib.h> #include <cmath> #define MAXN 31270 using namespace std; unsigned len[MAXN]; //len[i]=1....i的长度 eg:1...10就是12345678910,长度为11 unsigned s[MAXN]; //s[i]=a1a2a3...an的长度,eg:a1a2a3=112123,长度为6 int main() { int T,n,length,ans,pos; len[1]=1,s[1]=1; for(int i=2;i<MAXN;i++) { len[i]=len[i-1]+(unsigned int)log10((double)i)+1; s[i]=s[i-1]+len[i]; } scanf("%d",&T); while(T--) { int i; length=0; //length=当前已经遍历过的n之前的序列长度 scanf("%d",&n); for(i=1;s[i]<n;i++); //下面n所在的对应子序列就是ai //对序列ai进行分解 pos=n-s[i-1]; //pos=n到序列ai-1尾巴的距离 i=1; while(length<pos) { length+=(unsigned int)log10((double)i)+1; //length加上数字i的位数 i++; } ans=((i-1)/(int)pow((double)10,length-pos))%10; printf("%d\n",ans); } return 0; }
相关文章推荐
- poj1019 递推 number sequence
- POJ1019————Number Sequence
- ACM篇:POJ 1019--Number Sequence
- poj1019--Number Sequence(组合篇3)
- poj1019 递推关系
- POJ1019——Number Sequence(大数处理)
- POj 1019 number sequence(数学)
- UVa 10706 - Number Sequence(POJ 1019)
- poj 1019 Number Sequence 第i位上的数字 (组合数学)
- POJ 1019, Number Sequence
- POJ 1019 Number Sequence(枚举)
- POJ 1019 Number Sequence
- POJ 1019 Number Sequence 笔记
- POJ 1019 Number Sequence
- poj 1019 Number Sequence
- POJ1019 Number Sequence
- POJ1019 ZOJ1410 UVA10706 Number Sequence【数学】
- POJ 1019 Number Sequence 解读
- poj1019--Number Sequence题解
- POJ1019-Number Sequence