Dual Palindromes<uscao>1.2 <进制转换+枚举>

来源:互联网 发布:淘宝一元拍卖 编辑:程序博客网 时间:2024/05/16 16:22

the reason of failuire:1、题目是要求第一行输入N S 第一个数N为需要输出从S开始的符合条件的N个数,而我误解为S开始到S+N区间里的数.

2、开了一个名为qq的数组用来标记各个数字转换进制为为回文数的次数,但开得比较小,结果数据大于所开的数组了,应该看着题意来开数组.

thinking:把从S开始的数转换为2-10进制,然后判断其是否为回文数,然后统计其是回文数的次数,然后判断次数是否>=2,如果是则输出,然后用一个标记来记忆输出的次数以便循环的结束.

题目:

★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

源代码:

/*  PROG: dualpal  LANG: C++     ID: me      */  #include <bits/stdc++.h>using namespace std;int main(){freopen("dualpal.in","r",stdin);freopen("dualpal.out","w",stdout);long long a1,f1=0,a2,i,j,k,l,x,f2,a,f4=0;char result[500000];int qq[50000];memset(qq,0,sizeof(qq));cin >> a1 >> a2;int mod;for(i=a2+1;f4!=a1;i++){for(x=2;x<=10;x++){f1=0;f2=0;a=i;memset(result,0,sizeof(result));while(a){mod=a%x;a=a/x;if(mod<10)result[++f1]=mod+48;elseresult[++f1]=mod+55;}for(j=1;j<=f1/2;j++)if(result[j]!=result[f1-j+1])f2=1;if(f2==0)qq[i]++;}if(qq[i]>=2){f4++;qq[i]=-1;cout << i << endl;} }return 0;}


0 0
原创粉丝点击