您的位置:首页 > 产品设计 > UI/UE

poj 1019 Number Sequence

2013-09-14 12:16 459 查看
#include <iostream>
#include <stdio.h>

using namespace std;

int D[100001];
int get_digit(int k) //k占用几位
{
if(D[k] !=  0)
return D[k];

int tk=0;
while(k>0)
{
tk++;
k /= 10;
}

D[k] = tk;
return D[k];
}
int get_in_k(int k,int M)//在Dk寻找第M个位置的数字
{
int i=1;

//printf("init k=%d M=%d\n",k,M);
while(M> get_digit(i))
{
M -= get_digit(i);
i++;
}

int l = get_digit(i) +1 - M; //M是从左边,即高位在i中寻找第M个数字。 l是从右边即低位寻找第M个数组

//printf("k=%d M=%d l=%d i=%d\n",k,M,l,i);
while( l > 1)
{
i /= 10;
l--;
}

return i%10;
}
int solve(int M)
{
int k=1;
int l=1;
while( M > l)
{
M -= l; //l是Sk占用的位数,SK占用的位数是SK-1占用位置 +k占用的位数
//l++;
k++;
l += get_digit(k);
}

return get_in_k(k,M);

}
int main(){

int n;
cin>>n;
for(int i=1;i<=n;i++)
{
int M;
cin>>M;
cout<<solve(M)<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: