pku 1019

题意:一串有有数字构成且有数学规律的字符串,求出第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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值