洛谷 P1207 [USACO1.2]雙重回文數 Dual Palindromes
阿新 • • 發佈:2017-11-18
順序 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