`
xxx0624
  • 浏览: 31765 次
文章分类
社区版块
存档分类
最新评论

POJ2402+模拟

 
阅读更多

题意:找出第index 个回文数。

这题是有规律的,即list[]数组。

其次,对于某个 index 可以先精确到 位数 pos,然后在进行分析。

#include<stdio.h>
#include<string.h>
#include<math.h>
typedef __int64 int64;
int64 list[ 24 ];
int ans[ 240 ];

void init(){
    list[0] = 0;
    list[1] = 9;
    list[2] = 9;
    list[3] = 90;
    list[4] = 90;
    list[5] = 900;
    list[6] = 900;
    list[7] = 9000;
    list[8] = 9000;
    list[9] = 90000;
    list[10] = 90000;
    list[11] = 900000;
    list[12] = 900000;
    list[13] = 9000000;
    list[14] = 9000000;
    list[15] = 90000000;
    list[16] = 90000000;
    list[17] = 900000000;
    list[18] = 900000000;
    list[19] = 9000000000;
    list[20] = 9000000000;
    //printf("list20=%I64d\n",list[20]);
}
int main(){
    int64 index;
    init();
    while( scanf("%I64d",&index),index ){
        int pos;
        for( int num=0;num<=20;num++ ){
            if( index>=list[ num ] ){
                index -= list[ num ];
                pos = num;
            }
            else
                break;
        }
        if( index>0 ) pos ++;
        //printf("pos=%d\n",pos);
        if( index==0 ){
            for( int i=0;i<pos;i++ )
                printf("9");
            printf("\n");
            continue;
        }
        int64 cur = list[ pos ]/9;
        if( index>=cur ){
            index += cur;
            index --;
            int tt=0;
            while( index!=0 ){
                ans[ tt++ ] = index%10;
                index /= 10;
            }
            if( pos%2==0 ){
                for( int i=tt-1;i>=0;i-- )
                    printf("%d",ans[i]);
                for( int i=0;i<tt;i++ )
                    printf("%d",ans[i]);
                printf("\n");
            }//偶数位
            else{
                for( int i=tt-1;i>=0;i-- )
                    printf("%d",ans[i]);
                for( int i=1;i<tt;i++ )
                    printf("%d",ans[i]);
                printf("\n");
            }//奇数位
        }
        else{
            index--;
            int num1 = 0;
            int num2 = 0;
            while( cur!=0 ){
                num1++;
                cur /= 10;
            }
            int tt = index;
            while( tt!=0 ){
                num2++;
                tt /= 10;
            }
            tt = 0;
            while( index!=0 ){
                ans[tt++] = index%10;
                index/=10;
            }
            for( int i=1;i<=num1-num2;i++ )
                if( i==num1-num2 )
                    ans[tt++] = 1;
                else
                    ans[tt++] = 0;
            if( pos%2==0 ){
                for( int i=tt-1;i>=0;i-- )
                    printf("%d",ans[i]);
                for( int i=0;i<tt;i++ )
                    printf("%d",ans[i]);
                printf("\n");
            }
            else{
                for( int i=tt-1;i>=0;i-- )
                    printf("%d",ans[i]);
                for( int i=1;i<tt;i++ )
                    printf("%d",ans[i]);
                printf("\n");
            }
        }
    }
    return 0;
}


分享到:
评论

相关推荐

    poj 800+ 题目源代码,多年做题积累

    2867题可能涉及到模拟或回溯法;3114题则可能需要解决复杂度较高的计算问题。 通过学习这些源代码,读者不仅可以了解到每种问题的通用解题思路,还能看到具体的实现细节,这对于理解和提升编程技巧极其有益。同时,...

    Poj1379模拟退火

    poj1379 给予平面内一个点集; 使用模拟退火求出一个点使该点到上述点集内任意一点最短距离最长。

    POJ算法题目分类

    * 模拟法:模拟法是指通过模拟问题的过程来解决问题的方法,如 poj1068、poj2632、poj1573、poj2993、poj2996。 二、图算法 图算法是指解决图相关问题的算法,包括图的深度优先遍历和广度优先遍历、最短路径算法...

    poj题目分类

    * 模拟法:通过模拟问题的过程来解决问题,例如 poj1068、poj2632、poj1573、poj2993、poj2996。 2. 图算法: * 图的深度优先遍历和广度优先遍历:例如 poj1860、poj3259、poj1062、poj2253、poj1125、poj2240。 ...

    POJ.rar_poj java_poj1048

    约瑟夫环问题的解决方案通常使用链表或者循环数组来模拟圈子,用一个计数器来记录报数。在Java中,可以创建一个`LinkedList`或者自定义数组类来存储人,然后遍历链表或数组,每次报数到特定值时删除相应的人。对于...

    poj训练计划.doc

    - 模拟法:按照题目描述的规则进行操作,直至得到结果,如`poj1068, poj2632, poj1573`。 - **图算法** - 图的深度优先遍历和广度优先遍历:用于探索图的所有节点,如`poj1860, poj3259`。 - 最短路径算法:如...

    POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类POJ分类

    - **例题**:poj1860, poj3259, poj1062, poj2253, poj1125, poj2240 - **解释**:最短路径算法包括Dijkstra算法、Bellman-Ford算法、Floyd算法以及堆优化的Dijkstra算法等。 ##### (3) 最小生成树算法 - **例题**...

    poj各种分类

    模拟法是对题目场景的直接模拟,适用于逻辑清晰、规则明确的问题,如poj1068和poj2632。虽然这种方法直观易懂,但在复杂度较高的情况下,效率可能不如更高级的算法。 ### 二、图算法 #### 图的遍历 包括深度优先...

    POJ1840-Eqs

    8. **模拟**:有些题目可能需要编写程序来模拟现实世界的某些过程,例如模拟游戏规则或物理现象。 9. **位运算**:对于效率要求高的题目,位运算技巧可以提高代码运行速度。 10. **记忆化搜索**:当动态规划问题...

    POJ1017-Packets

    4. **模拟算法**:根据题目描述,可能需要编写一个模拟数据包处理过程的算法,例如解析数据包的头部信息、计算数据包的有效载荷等。 5. **数学知识**:一些题目可能需要运用到基础数学,如数论、概率统计等。 6. *...

    POJ题目简单分类(ACM)

    - **模拟法**:按照题目描述的逻辑进行编程模拟,如poj1068、poj2632等。 2. **图算法**: - **深度优先遍历和广度优先遍历**:是图的基本操作,用于搜索图的所有节点。 - **最短路径算法**:包括dijkstra、...

    acm训练计划(poj的题)

    - (poj1860, poj3259, poj1062, poj2253, poj1125, poj2240):介绍迪杰斯特拉算法(Dijkstra)、贝尔曼-福特算法(Bellman-Ford)、弗洛伊德算法(Floyd)等。 - 使用堆优化的迪杰斯特拉算法。 3. **最小生成树...

    POJ 我收集的解题报告(100多道)

    8. **模拟法**:按照题目描述进行程序设计,模拟实际情况。 9. **编码技巧**:如位操作、动态类型、模板等,以提高代码效率或简洁性。 这些解题报告不仅可以帮助初学者逐步建立对算法的理解,提升编程技能,对于...

    POJ1416-Shredding Company

    在这个问题中,我们需要设计一个程序来模拟一个撕碎公司的运营。具体来说,该公司拥有n台不同效率的碎纸机,每台机器可以处理一定数量的文件。任务是找到一种方式,使得在处理完一定数量的文件时,所用的时间最短。 ...

    北京大学poj题目类型分类

    模拟题是POJ题目中的一种重要题型,通常涉及模拟实际情况和场景的应用,如模拟游戏、模拟运动等。这些题目要求学习者具备模拟算法和场景分析的基础知识。 * 1012 Joseph:这是一个模拟题目,要求学习者编写一个程序...

    POJ1004-Financial Management

    【标题】"POJ1004 - Financial Management" 是一个来自北京大学在线判题系统POJ(Problem Set of Peking University)的编程题目。这个题目主要涉及到计算机科学中的算法设计和实现,特别是与财务管理和计算相关的...

    POJ3087-Shuffle'm Up

    【标题】"POJ3087-Shuffle'm Up"是一个经典的在线编程竞赛题目,源自北京大学的编程平台POJ(Problem Online Judge)。该题目主要涉及算法设计与实现,特别是数组操作和概率计算。 【描述】"解题报告+AC代码"意味着...

    POJ各题算法分类和题目推荐 ACM必看

    本资源主要介绍了POJ(Online Judge)平台上各种算法分类和推荐题目,涵盖了动态规划、模拟、博弈等多种类型。以下是详细的知识点说明: 一、动态规划 动态规划是一种非常重要的算法思想,它可以解决许多复杂的...

    acm poj300题分层训练

    如poj1753、poj2965用于枚举训练,poj1328、poj2109、poj2586是贪心策略的实例,poj2506和poj3295涉及分治法,poj1068、poj2632等则用于模拟训练。 2. **图算法**:包括图的深度优先遍历、广度优先遍历、最短路径...

    Poj1006题目ac代码

    在编程竞赛中,这样的问题可能要求参赛者模拟或计算某种基于时间周期的模式。 根据以上信息,我们可以推测POJ1006可能是一个要求编程解决生物节律计算的问题,例如计算一个人在特定日期的生理、情绪和智力周期。这...

Global site tag (gtag.js) - Google Analytics