1. 程式人生 > >洛谷 P1207 [USACO1.2]雙重回文數 Dual Palindromes

洛谷 P1207 [USACO1.2]雙重回文數 Dual Palindromes

順序 usaco section for hold sin pos i++ training

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

思路:模擬

#include<cstdio>
#include<cstring>
#include<iostream>
#include
<algorithm> using namespace std; int n,s,num; int prime[100]; int main(){ scanf("%d%d",&n,&s); for(int i=s+1;i;i++){ if(num==n) break; int tot=0; for(int j=2;j<=10;j++){ int k=i,flag=0,pos=0; while(k){ prime[
++pos]=k%j; k/=j; } for(int l=1;l<=pos/2;l++) if(prime[l]!=prime[pos-l+1]) flag=1; if(!flag) tot++; } if(tot>=2) cout<<i<<endl,num++; } }

洛谷 P1207 [USACO1.2]雙重回文數 Dual Palindromes