acm之poj题库1019方法

时间:2022-09-08 18:39:23

认识了几个师弟,一直总想把自己的经验表达出来一些,让后面的人在更年轻的时候,认识到方向、努力。

昨天忽然想起自己在大学时候做了几天的acm,终于也没能坚持。然后就感觉带师弟们做下acm题目还是很不错。

poj还是熟悉的界面,不过大学时候注册的账号也忘记了。想起来也没有几道题目被ack~于是重新注册了个账号。

当然一下就是1019题目,还以为这道题目挺水的,结果前前后后花了一上午的时间才被ack。

-----------------关于1019题目的题意---------------------

存在一个序列,序列是这样的S1S2...Sk,每个Sk又是从1到k数字的序列。

例如该序列的前80位如下所示

11212312341234512345612345671234567812345678912345678910123456789101112345678910

要求:输入一个数字的位置,然后输出在该位置的数字。

比如 :

  3 将输出2

  8 将输出2

  80 将输出0(根据题干中序列前80位可得)

  81 将输出1(根据题干中得知序列接下来的数字是11,因此第81位输出的数字位1)

-----------------解答思路-----------------------------------------

观察序列,可知整体序列S1S2...Sk由k的子序列,同时第K个子序列是K-1个子序列加上最大的一个数字组成。

因此我的思路可以分为三个步骤:

1。确定输入位置所在的子序列

2。确定子序列中的数字(该数字可能为十位或者百位)

3。确定数字中的具体字符

-----------------具体参考代码-----------------------------------

#include <stdio.h>
#include <math.h>

int number, tmp;
int big, big_length, sub_str_length;
int sub_big, pos, result;
int array[10];
int ind;

int main()
{    
    int count;
    scanf("%d", &count);

while(count--)
    {    
        scanf("%i", &number);

  //确定子序列
        big = 1;
        sub_str_length = 1;
        while(1)
        {    
            if(sub_str_length < number)
            {
                number -= sub_str_length;
                big ++;

     //子序列最大数字长度
                tmp = big;
                big_length = 0;
                while(tmp)
                {
                    big_length++;
                    tmp = tmp/10;
                }
                sub_str_length +=  big_length;
            }else
            {
                break;
            }

}

  //所在子序列中的具体数字,及数字的位置
        pos = 0;
        sub_big = 0;
        while( pos < number)
        {
            sub_big++;
            tmp = sub_big;
            result = 0;
            while(tmp)
            {
                result ++;
                pos ++;
                if( pos == number)
                    goto print;
                
                tmp = tmp /10;
            }
        }

  //根据所在数字及在当前数字中的位置打印具体字符
        print:
            while(sub_big)
            {
                array[ind++] = sub_big % 10;
                sub_big /= 10;
            }
            printf("%d\n",  array[ind-result]);
    }
    return 0;
}

acm之poj题库1019方法的更多相关文章

  1. acm之poj题库1001方法

    题目所言是银行等不能用四舍五入等影响精度的方法来计算的情况,是为提出背景.因此需要特殊的编写.这里使用了好几种方法才找到一个合适的方法.因为C++或者C缺乏类库,又跟底层关联太大,缺乏常用的类库,在写 ...

  2. 北大POJ题库使用指南

    原文地址:北大POJ题库使用指南 北大ACM题分类主流算法: 1.搜索 //回溯 2.DP(动态规划)//记忆化搜索 3.贪心 4.图论 //最短路径.最小生成树.网络流 5.数论 //组合数学(排列 ...

  3. Java题库——Chapter5 方法

    1)Suppose your method does not return any value, which of the following keywords can be used as a re ...

  4. ACM在线题库

    现在网上有许多题库,大多是可以在线评测,所以叫做Online Judge.除了USACO是为IOI准备外,其余几乎全部是大学的ACM竞赛题库. USACO http://ace.delos.com/u ...

  5. 数据排序 第二讲( 各种排序方法 结合noi题库1&period;10)

    先来个题练练手吧! 例题 04:奖学金 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 某小学最近得到了一笔赞助,打算拿出其中一部分为学习成绩优秀的前5名学生 ...

  6. OnlineJudge 离线题库采集

    过段时间要把以前的OJ换掉,我负责VirtualJudge的部分.需要用C与PHP写一个Linux下的VJudge. 在此之前,将以前写给自己学弟学妹用的OJ离线题库的采集程序改进了一下.支持国内一些 ...

  7. 猿题库 iOS 客户端架构设计

    原文: http://mp.weixin.qq.com/s?__biz=MjM5NTIyNTUyMQ==&mid=444322139&idx=1&sn=c7bef4d439f4 ...

  8. NOI题库 1768最大子矩阵 题解

    NOI题库 1768最大子矩阵  题解     总时间限制: 1000ms 内存限制: 65536kB   描述   已知矩阵的大小定义为矩阵中所有元素的和.给定一个矩阵,你的任务是找到最大的非空(大 ...

  9. 猿题库 iOS 客户端架构设计-唐巧

    序 猿题库是一个拥有数千万用户的创业公司,从20013年题库项目起步到2015年,团队保持了极高的生产效率,使我们的产品完成了五个大版本和数十个小版本的高速迭代. 在如此快速的开发过程中,如何保证代码 ...

随机推荐

  1. fatal error C1010&colon; 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加&OpenCurlyDoubleQuote;&num;include &quot&semi;StdAfx&period;h&quot&semi;”&quest; 解决方法

    错误描述: fatal error C1010: 在查找预编译头时遇到意外的文件结尾.是否忘记了向源中添加“#include "StdAfx.h"”? 错误分析:     此错误发 ...

  2. 修改PHP 上传文件大小限制

    Windows 环境下的修改方法 ================================================================第一步:修改在php5下POST文件大 ...

  3. Linux自启动

    linux 下tomcat开机自启动修改Tomcat/bin/startup.sh 为:export JAVA_HOME=/usr/java/j2sdk1.4.2_08export CLASSPATH ...

  4. Git之忽略文件&lpar;ignore file&rpar;

      1.    环境 Windows XP SP3 + TortoiseGit + msysGit 2.  ignore files的三种方法 以下涉及的ignore文件均为如下格式: # 以'#'开 ...

  5. C&plus;&plus;类的大小

    C++类的大小   一个空类class A{};的大小为什么是1,因为如果不是1,当定义这个类的对象数组时候A objects[5]; objects[0]和objects[1]就在同一个地址处,就无 ...

  6. for&sol;range&sol;break&sol;continue

    #for智能循环 members=['武林至尊','宝刀屠龙','号令天下','莫敢不从'] for every in members:     print(every,len(every)) 武林至 ...

  7. SQLI LABS Stacked Part&lpar;38-53) WriteUp

    这里是堆叠注入部分 less-38: 这题啥过滤都没有,直接上: ?id=100' union select 1,2,'3 less-39: 同less-38: ?id=100 union selec ...

  8. 测试连接失败,因为初始化提供程序时发生错误,&lbrack;DBNMPNTW&rsqb; ConnectionOpen &lpar;CreateFile&lpar;&rpar;&rpar;

    此主题相关图片如下:错误.jpg 今天发布的程序,在其它电脑上运行没问题,就是其中一台电脑上运程报这个错.系统是Win7的查了好久,最后解决 方法如下: 在报错的电脑上,单击"开始&quot ...

  9. HDU 3466 Proud Merchants(0-1背包)

    http://acm.hdu.edu.cn/showproblem.php?pid=3466 题意: 最近,iSea去了一个古老的国家.在这么长的时间里,它是世界上最富有和最强大的王国.结果,这个国家 ...

  10. Android四种跨进程通信

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...