• POJ 1019 Number Sequence


    // 11212312341234512345612345671234567812345678912345678910123456789101112345678910......
    // 给你个n 求上面的序列第n个数字是多少
    // 我是先按尾巴数字位数分组
    // 定义如下数据结构
    // 然后在求在确定位数里面的第几个
    // 再求这个子序列里面的某一位
    // 就是分组 归类的思想
    // 1Y ,看来思路清晰,代码清晰对于准确率来说是满重要,以前老是迷迷糊糊就开始写代码
    #include <iostream> #include <string> #include<sstream> #include <cmath> #include <map> #include <stdio.h> #include <string.h> #include <algorithm> using namespace std; #define LL long long /* 结束的数值 个数 长度范围 1 9 9 1 9 1位 10 99 90 11 189 2位 100 999 900 ..... 1000 9999 9000 ..... 10000 99999 90000 ..... */ struct node { int len; //位数 int num; //个数 LL l,r; //长度区间 LL sum; //长度和 }st[10]; int GetAns(int index,LL n) { LL x=st[index].l; while(n>x) { n-=x; x+=index; } int len[10],start[10],num[10]; len[1]=9;start[1]=1;num[1]=9; int i; for(i=2;i<=5;i++) { num[i]=num[i-1]*10; len[i]=i*num[i]; start[i]=start[i-1]*10; } i=1; while(n) { if(n>len[i]) { n-=len[i]; i++; } else break; } int k=start[i]+n/i; int stack[10],j; if(n%i==0) { k--; return k%10; } else { k++; i=n%i; j=0; while(k) { stack[j++]=k%10; k/=10; } while(i--) { j--; } return stack[j]; } } int main() { st[1].len=1;st[1].num=9; st[1].l=1;st[1].r=9; st[1].sum=(1+9)*9/2; int i; for(i=2;i<=5;i++) { st[i].len=i;st[i].num=st[i-1].num*10; st[i].l=st[i-1].r+i; st[i].r=st[i-1].r+i*st[i].num; st[i].sum=(st[i].l+st[i].r)*st[i].num/2; } // for(i=1;i<=5;i++) // printf("%d %d %lld %lld %lld ",st[i].len,st[i].num,st[i].l,st[i].r,st[i].sum); int t; LL n; scanf("%d",&t); while(t--) { scanf("%lld",&n); for(i=1;i<=5;i++) { if(n>st[i].sum) n-=st[i].sum; else break; } printf("%d ",GetAns(i,n)); } return 0; }
  • 相关阅读:
    微信小程序实现滚动到指定位置
    微信小程序,scroll-view组件的使用,跳转到指定的锚点/定位跳转
    小程序,报渲染层错误。图片无法渲染。
    input Input 输入判断/正则
    js,某元素在浏览器页面浮动/飘动
    前端模块化
    npx create-react-app命令不成功,更改成淘宝镜像
    深入理解jdk和jre(转)
    Java学习路线图·影响一代又一代程序员的经典书籍!(转)
    ZAB协议(转)
  • 原文地址:https://www.cnblogs.com/372465774y/p/3603719.html
Copyright © 2020-2023  润新知