• 【洛谷P1207】双重回文数 【USACO1.2】


    P1207 [USACO1.2]双重回文数 Dual Palindromes


    题目描述

    如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做“回文数”。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。

    事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。

    编一个程序,从文件读入两个十进制数N (1 <= N <= 15)S (0 < S < 10000)然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。

    本问题的解决方案不需要使用大于32位的整型

    输入输出格式

    输入格式:

    只有一行,用空格隔开的两个数N和S。

    输出格式:

    N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。

    输入输出样例

    输入样例#1:
    3 25
    
    输出样例#1:
    26
    27
    28
    

    说明

    题目翻译来自NOCOW。

    USACO Training Section 1.2


    这道题真不难。。

    说说几个把弱智的我卡主的地方。。。

    ok的各种问题。。还有强行优化使用位运算比较大小导致的错误。。。

    别忘了要有两个及两个以上

    上代码


    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    
    const int MAXN = 100000 + 10;
    
    int n,s;
    int num[MAXN],lenth;
    
    int main()
    {
    	scanf("%d%d", &n, &s);
    	while(n)
    	{
    		s++;
    		int cnt = 0;
    		for(int i = 2; i<= 10; i++)
    		{
    			lenth = 0;
    			int temp = s;
    			bool ok = true;
    			while(temp)
    			{
    				num[++lenth] = temp % i;
    				temp /= i;
    			}
    			for(int i = 1;i <= lenth / 2;i++)
    			{
    				if(num[i] ^ num[lenth - i + 1]) 
    				{
    					ok = false;
    					break;
    				}
    			}
    			if(ok)
    			{
    				cnt ++;
    			}
    			if(cnt == 2)
    			{
    				printf("%d
    ", s);
    				n --;
    				break;
    			}
    		}
    
    	}
    	return 0;
    }
    


  • 相关阅读:
    Python 存储引擎 数据类型 主键
    Python 数据库
    Python 线程池进程池 异步回调 协程 IO模型
    Python GIL锁 死锁 递归锁 event事件 信号量
    Python 进程间通信 线程
    Python 计算机发展史 多道技术 进程 守护进程 孤儿和僵尸进程 互斥锁
    Python 异常及处理 文件上传事例 UDP socketserver模块
    Python socket 粘包问题 报头
    Django基础,Day7
    Django基础,Day6
  • 原文地址:https://www.cnblogs.com/huibixiaoxing/p/6537740.html
Copyright © 2020-2023  润新知