zoukankan      html  css  js  c++  java
  • USACO 1.2.5 Dual Palindromes

    //译题
    //★Dual Palindromes 双重回文数
    如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”.例如,12321 就是一
    个回文数,而77778 就不是.当然,回文数的首和尾都应是非零的,因此0220 就不是回文数.
    事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是
    回文数.
    11
    编一个程序,从文件读入两个十进制数
    N (1 <= N <= 15) S (0 < S < 10000)
    然后找出前N 个满足大于S 且在两种以上进制(二进制至十进制)上是回文数的十进制数,输出到
    文件上.
    本问题的解决方案不需要使用大于4 字节的整型变量.
    PROGRAM NAME: dualpal
    INPUT FORMAT
    只有一行,用空格隔开的两个数N 和S.
    SAMPLE INPUT (file dualpal.in)
    3 25
    OUTPUT FORMAT
    N 行, 每行一个满足上述要求的数,并按从小到大的顺序输出.
    SAMPLE OUTPUT (file dualpal.out)
    26
    27
    28
    //参考代码
    /*
            这道题目和上一道题目差不多,依据题目的意思,
            需要判断一个数是否是双重回文数,
            这里注意的还是 进制的转换
                           回文数的判断,
                           其他没什么了
                           (注意要输出的是前N个大于S,并非大于等于S)
                           (题目提示4字节的整型变量足够解决问题) 
    */
    #include<stdio.h>
    int num[15], x[15], l;
    
    void Change( int n,int B)
    {
        int m = n, i, j;
        l = -1;
        while(m) {x[++l] = m%B; m /= B;} 
        for(i=l,j=0;i>=0;j++,i--)
            num[j] = x[i];
    }
    
    int OK()
    {
        int i,j;
        for(i=0,j=l;i<=j;i++,j--)
            if(num[i]!=num[j])    return 0;
        return 1;
    }
    
    
    int main()
    {
        int i, j, k, flag, N, S;
        freopen("dualpal.in","r",stdin);
        freopen("dualpal.out","w",stdout);
        scanf("%d %d",&N,&S);
        for(i=S+1,k=0;k<N;i++)
        {
            for(j=2,flag=0;j<=10;j++)
            {
                Change(i,j);
                if(OK()) flag++;
                if(flag>=2) break;
            }
            if(flag>=2) 
            {
                printf("%d
    ",i);
                k++;
            }
        }
        return 0;
    }
    #include<stdio.h>
    #include<string.h>
    int N, S, i, sum; 
    int judge( int num )
    {
        int i,j,p,k,n,sum=0,a[100]={},l; // k为进制 ,p来判断是否是回文数 
     
       for(k=2;k<=10;++k)
       {
          n=num; l=0; p=1;
          while(n) a[++l]=n%k, n/=k;
          for(i=1,j=l;i<=j && p;++i,--j)
             if(a[i]!=a[j]) p=0;
          if(p) ++sum;
          if(sum>=2) return 1;
       }
       return 0;
    }
    
    int main()
    {
    
        freopen("dualpal.in","r",stdin);
        freopen("dualpal.out","w",stdout);
        
        scanf("%d %d",&N, &S);
        for(i=S+1;sum<N;++i)
        {
            if(judge(i))
            {
                ++sum;
                printf("%d
    ", i);
            }    
        }
        return 0;    
    }
  • 相关阅读:
    内容页超连接关键词的完美实现
    鼠标经过文字链接时出现漂亮的提示层
    简单的jQuery检测注册用户名
    触发Repeater中的Dropdownlist的SelectedIndexChanged如何获得Repeater的当前行
    读取XML的节点属性并绑定到ListBox
    第十八章 6string型字符串的替换 简单
    第十八章 2string字符串 简单
    第十七章 特殊成员_函数指针也可以做为参数 简单
    第十七章 特殊成员_类的函数指针 简单
    第十七章 特殊成员_成员函数指针数组 简单
  • 原文地址:https://www.cnblogs.com/Lee-geeker/p/3226524.html
Copyright © 2011-2022 走看看