zoukankan      html  css  js  c++  java
  • poj1019 Number Squence

    题意:
      一直一个有序数组,给定一个数字n代表已知数组的第n个数,求该书是几。
    分析:
      1,根据数组规律对其分组:1 12 123 1234 12345......
      2,首先求n在第几组中,再求n在其分组的第几个数中同时我们也可求得是该书的第几位。
      3,我们分得的数组中数字依次变大,位数越来越多,但我们是要按照每一个数字来计算位置信                 息。比如:123(一百二十三)是三个数,所以们就用到    log10求得其位数。
     1 #include<iostream>
     2 #include<cmath>
     3 using namespace std;
     4 #define size 31269
     5 unsigned a[size],s[size];
     6 void play_table()
     7 {
     8     int i;
     9     a[1]=s[1]=1;
    10     for(i=2;i<size;i++)
    11     {
    12         a[i]=a[i-1]+(int)log10((double)i)+1;//a[i]是第i组最大数的位数。
    13         s[i]=s[i-1]+a[i];//s[i]是第i组的长度。
    14     }
    15 }
    16 int main()
    17 {
    18     play_table();
    19     int t,n,i,pos,len;
    20     cin>>t;
    21     while(t--)
    22     {
    23         i=1;len=0;
    24         cin>>n;
    25         while(n>s[i])
    26         {
    27             i++;
    28         }//求的n在第几组中。
    29         pos=n-s[i-1];//n在其所在组中的位置。
    30         for(i=1;len<pos;i++)
    31         len+=(int)log10((double)i)+1;//求得n在第几个数的第几位。
    32         cout<<(i-1)/(int)pow((double)10,len-pos)<<endl;
    33     }
    34 return 0;
    35 }
  • 相关阅读:
    白话插件框架原理
    C# 可扩展编程MEF学习
    C#依赖注入实例
    迷你版AOP框架
    AOP 面向切面编程
    C++ 面向对象
    c++ 的异常处理
    C++ 模板 template
    c 二维数组动态分配和释放
    C++ 指针二维数组, C++二维指针数组笔记
  • 原文地址:https://www.cnblogs.com/Neptunes/p/3375094.html
Copyright © 2011-2022 走看看