zoukankan      html  css  js  c++  java
  • POJ 1019 数学题

     1 #include <cstdio>
     2 #include <cstring>
     3 
     4 using namespace std;
     5 
     6 int sum[20];
     7 //sum[i]表示尾数为i的组最大可达到的数字个数
     8 void init()
     9 {
    10     sum[0] = 0;
    11     sum[1] = 9;
    12     sum[2] = 189;
    13     sum[3] = 2889;
    14     sum[4] = 38889;
    15     sum[5] = 488889;
    16     sum[6] = 5888889;
    17 }
    18 
    19 //找到最后对应的组数属于的范围是在多少位的整数上,返回整数的位数
    20 int get_bit(int &n)
    21 {
    22     for(int i = 0 ; i<6 ; i++){
    23         if(n > sum[i] && n <= sum[i+1])
    24         {
    25             n -= sum[i];
    26             return i+1;
    27         }
    28     }
    29     return -1;
    30 }
    31 //返回g这个组中对应的数字的个数
    32 int get_num_of_group(int g)
    33 {
    34     int t = 10;
    35     int k = 1;
    36     int ret = 0;
    37     while(g >= t){
    38         ret += t/10*9*k;
    39         t *= 10;
    40         k++;
    41     }
    42     ret += (g - t/10 + 1) * k;
    43     return ret;
    44 }
    45 
    46 int main()
    47 {
    48     int T;
    49     //cout<<get_num_of_group(100)<<endl;
    50     scanf("%d" , &T);
    51     init();
    52     while(T--){
    53         int n;
    54         scanf("%d" , &n);
    55         int group = 1;
    56         int cnt = 1;
    57         //group表示第几组,cnt表示对应组中含有的数字的个数
    58         while(1){
    59             if(n <= cnt) break;
    60             n -= cnt;
    61             group++;
    62             cnt = get_num_of_group(group);
    63         }
    64         //cout<<"group"<<group<<" "<<n<<endl;
    65         int t = get_bit(n);
    66         //cout<<"t  " <<t<<endl;
    67         int st;
    68         //st表示从几位数字开始找起,如st = 10,表示最后这个点属于10-99范围
    69         if(t < 0) st = 1 , t = 1;
    70         else
    71         {
    72             st = 1;
    73             for(int i=1 ; i<=t-1 ; i++)
    74                 st *= 10;
    75 
    76         }
    77         //cout<<"st  " <<st<<endl;
    78         while(n > t){
    79             n -= t;
    80             st++;
    81         }
    82         n = t + 1 - n;
    83         int ans = st%10;
    84         for(int i=1 ; i<=n ; i++){
    85             ans = st%10;
    86             st /= 10;
    87         }
    88         printf("%d
    " , ans);
    89     }
    90    // cout<<9 + 2*90 + 3*900<<endl;
    91     return 0;
    92 }
  • 相关阅读:
    设置按钮取消高亮
    类似刷新微博后,顶部显示更新数量的动画。
    真机调试时,后台无法持续定位
    第六百三十三、四天 how can I 坚持
    第六百三十二天 how can I 坚持
    第六百三十一天 how can I 坚持
    第六百三十天 how can I 坚持
    第六百二十九天 how can I 坚持
    第六百二十八天 how can I 坚持
    第六百二十七天 how can I 坚持
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/4162044.html
Copyright © 2011-2022 走看看