题目连接:10706 - Number Sequence

题目大意:有一个有0 ~ 9组成的序列,1   1 2    1 2 3   1 2 3 4   1 2 3 4 5 。。。。就是第一位为1. 第二为为1 ,第三为为2, 然后10 的部分注意下, 为1  和0 两个, 100 就是1 , 0和0 三位,以此类推, 要求给出tmp, 输出序列中的tmp位为什么数字。

解题思路:数据很大,肯定不能模拟,找规律。

这两个是为推出来的用来打表的公式:

1、sum[i] = sum[i - 1] * 2 - sum[i - 2] + w (w为当前i 的位数, sum[i]表示当前数字出现到i的时候占到序列的第几位)。

公式可以看成两部分, sum[i - 1] 和sum[i - 1] - sum[i - 2] + w.

sum[i - 1] 很明显是i - 1出现时所到达的位数, 那么开始生成i的时候,肯定是由sum[i - 1]这里开始的。

sum[i - 1] - sum[i - 2] + w就是从1 ~i所需要的位数, sum[i - 2] 为生成到i - 2所需要的个数,那么sum[i - 1] - sum[i - 2] 就为1 ~ i-1所需要的位数, 生成i - 1 和生成i只差了一个i,所以加上i的位数 就可以了。

2、num[i] = sum[i] - sum[i - 1],(num[i]为生成到i所需要的位数, 上面讲过了)

然后遍历一边sum数组, 找到第一个使得sum[i] >= tmp的i, 也就是说, tmp位的数是在生成1 ~i的过程中产生的数, 所以问题可以转换成找生成1 ~ i过程中的tmp - sum[i - 1]位。

接下来遍历一遍num数组,找到第一个i使得num[i] >= tmp的i, 也就是说, 处理过的tmp是在生成i的过程中产生的数,

输出tmp - num[i - 1]位与数i对应的位数值。

#include <stdio.h>
#include <stdlib.h>
const int N = 350000;
const int MAX = 2147483647;
const int w[] = {0, 10, 100, 1000, 10000, 100000}; int n = 2, num[N];
long long sum[N]; void init() {
sum[0] = num[0] = 0, sum[1] = num[1] = 1;
for (int cur = 1; sum[n - 1] < MAX; n++) {
if (n >= w[cur]) cur++;
sum[n] = sum[n - 1] * 2 - sum[n - 2] + cur;
num[n] = sum[n] - sum[n - 1];
}
} int main () {
init();
int cas, tmp, cur;
char str[10];
scanf("%d", &cas);
while (cas--) {
scanf("%d", &tmp);
for (cur = 1; cur < n; cur++)
if(tmp <= sum[cur]) break;
tmp -= sum[cur - 1];
for (cur = 1; cur < n; cur++)
if (tmp <= num[cur]) break;
tmp -= num[cur - 1];
sprintf(str, "%d", cur);
printf("%c\n", str[--tmp]);
}
return 0;
}

uva 10706 Number Sequence(数学规律)的更多相关文章

  1. UVA 10706 Number Sequence (找规律 + 打表 + 查找)

    Problem B Number Sequence Input: standard input Output: standard output Time Limit: 1 second A singl ...

  2. UVa 10706 - Number Sequence

    题目大意:Sk表示从1到k的字符序列,如S4为1234,现如今有如下的序列S1S2...Sk,形如1 12 123 1234这样的序列,给一个数n,让你去这个序列第n个位置上的数字. 可以构建出一个S ...

  3. PAT甲级——1104 Sum of Number Segments (数学规律、自动转型)

    本文同步发布在CSDN:https://blog.csdn.net/weixin_44385565/article/details/90486252 1104 Sum of Number Segmen ...

  4. 1005:Number Sequence(hdu,数学规律题)

    Problem Description A number sequence is defined as follows: f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1 ...

  5. HDU1005 Number Sequence(找规律,周期是变化的)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1005 Number Sequence Time Limit: 2000/1000 MS (Java/O ...

  6. 递推:Number Sequence(mod找规律)

    解题心得: 1.对于数据很大,很可怕,不可能用常规手段算出最后的值在进行mod的时候,可以思考找规律. 2.找规律时不必用手算(我傻,用手算了好久).直接先找前100项进行mod打一个表出来,直接看就 ...

  7. HDU 1005 Number Sequence【斐波那契数列/循环节找规律/矩阵快速幂/求(A * f(n - 1) + B * f(n - 2)) mod 7】

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  8. UVA - 10689 Yet another Number Sequence 矩阵快速幂

                      Yet another Number Sequence Let’s define another number sequence, given by the foll ...

  9. 数学: HDU1005 Number Sequence

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

随机推荐

  1. 3D objects key rendering steps

    Key steps of Rendering objects: 1 Create objects’ meshes, which we can use C++’s vector container to ...

  2. 关于bootstrap--排版(标题、强调、背景、插入符等)

    1. 2.标题:<h1>这是主标题<small>这是副标题,为当前字号65%,灰色(#999)</small></h1>. 3.段落:<p> ...

  3. sql获取每门课程成绩最好的学生信息

    1.相关数据表 Score表 [User]表 SQL语句例如以下: --查询出各科成绩最好的学生信息 --自连接 --SELECT TOP 1 * FROM Score B WHERE B.Score ...

  4. Cocos2d-x学习笔记(3)

    Cocos2d-x有一个包括全部其它头文件的cocos2d.h,仅仅要在使用时包括这个头文件,就能够使用引擎的全部功能.Cocos2d-x的类都放置于cocos2d的命名空间下,如引擎下的" ...

  5. Android模仿jquery异步请求

    01 package com.xbl.task; 02   03 import java.io.BufferedReader; 04 import java.io.InputStream; 05 im ...

  6. Unity 对象池的使用

    在游戏开发过程中,我们经常会遇到游戏发布后,测试时玩着玩着明显的感觉到有卡顿现象.出现这种现象的有两个原因:一是游戏优化的不够好或者游戏逻辑本身设计的就有问题,二是手机硬件不行.好吧,对于作为程序员的 ...

  7. linux加入windows域之完美方案(转载)

    概念理解:1.kdc:可信任的密钥分发中心(KDC, Key Distribution Center).2.Winbind是Samba套件的功能之一.它允许Unix系统利用Windows NT的用户帐 ...

  8. transition过渡的趣玩

    本例中将三张图(来自网络)进行堆叠,鼠标悬停触发.附有源代码

  9. 页面全屏显示JS代码

    1.直接在页面加载时就全屏. <body onload="window.open(document.location,'big','fullscreen=yes'):window.cl ...

  10. Protobuf, understand the hood

    proto文件定义 package lm; message Foo{ required int32 id = 1; } message Bar{ required int32 id = 1 [defa ...