pku 1019

来源:互联网 发布:sql drop所有表 c# 编辑:程序博客网 时间:2024/05/02 18:05

题意:一串有有数字构成且有数学规律的字符串,求出第n个字串是什么。

题解:首先一个字符串的定位是重点,然后需要数学知识每个数字的占的位数有log10(i)可以得得出,慢慢的向所要求的位置靠近

算法分类:数学。

代码是从网上看到和自己思路一样的代码学来的,寻找1的位置。

代码:

#include <stdio.h>
#include <math.h>
int main()
{
 int t;
 unsigned long n;
 unsigned long now,last;
 double i;
 int j,k;
 scanf("%d",&t);
 while(t--)
 {
  now=0;
  last=0;
  i=0;
  scanf("%ld",&n);
  while(now<n)
  {
   last+=(int)log10(++i)+1;//last指每一个由1开始的字符串的长度
   now+=last;//now指每一个有规律的字符串最后一个字符的长度

  // printf("%ld %ld !/n",last,now);
  }
  now-=last;//now的位置跑过了 回到最后now+1即为新的1开始的位置
  n-=now;//减小n的范围
  now=0;
  i=0;
  while(now<n)//逐步的向要求的靠近
  {
   now+=(int)log10(++i)+1;
  }
  now-=(int)log10(i)+1;//加多了 减回去
  n-=now;
  j=(int)log10(i)+2;
  j=j-n;
  for(k=1;k<j;k++)
   i=i/10;
  j=(int)i;
  j%=10;
  printf("%d/n",j);
 }
 return 0;
}