1 条题解
-
1
此题没有含金量,纯模拟。
首先判断素数,请移步http://112.16.216.176:29860/d/zjzx/p/41/solution,网站挂了就手动来到P41的题解区。
模板:
inline bool ss(int n) { if(n<2) return false; for(int i=2; i*i<=n; ++i) { if(n%i==0) { return false; } } return true; }
其次就是判断是不是回文数,这里我会给出两种方法(注意,一位数是特殊的回文数):
①、双指针
顾名思义,就是用两个指针,一个指向头,另一个指向尾,然后判断这两个下标上的数字相不相等,如果中断则返回假,如果最后头指针大于等于尾指针的位置,那么就返回真。
代码:
inline bool huiwen(int k) { int j=0,a[11]; while(k) { a[++j]=k%10; k/=10; } int x=1,y=j; while(a[x]==a[y]&&x<y) { ++x,--y; } return x>=y; }
②、数学
假设现在有一串数列2506887052,我们根据第①种办法,先枚举第一位1和最后一位10,然后枚举第二位和倒数第二位9......那么如果前面取第i位,不难看出后面就要取第(n-i+1)位,随后比较。
代码:
inline bool huiwen(int k) { int j=0,a[11]; while(k) { a[++j]=k%10; k/=10; } for(int i=1; i<=n; i++) { if(a[i]!=a[n-i+1]) { return false; } } return true; }
随后判断这个数如果既是素数,还是一个回文数,那么就将它输出,但是...
注意!!!
每行输出5个满足题目条件的数
当时坑了我半个小时......输出代码:
if(ss(i)&&huiwen(i)) {//i是枚举的数字,满足1<=i<=n) ++sum; p=false; if(sum%5!=0) cout<<i<<' '; else cout<<i<<'\n'; }
- 1
信息
- ID
- 40
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- (无)
- 递交数
- 142
- 已通过
- 37
- 上传者