看着题目好像很简单的样子,实际上做起来才会发现,这么多函数他奶奶的是普及-
难度?
在这道题目当中,我们最少需要写两个函数,如果需要优化可以再多写一个,待会儿的代码我们就直接放最简单版本的了。有人说这道题可以暴力对拍之后再输出,这完全可以,但是这么简单的题目不至于使用枚举,而且如果直接输出的话工程量会巨大,还不如直接把数据下载下来呢
OK,接下来就是你们最喜欢的代码环节~
代码
#include<bits/stdc++.h>
using namespace std;
int l, r;
bool check1(int x) {
if((1000 <= x && x <= 9999) || (100000 <= x && x <= 999999)) return 0;
return 1;
}
bool check2(int x) {
int a[20], flag = 1;
while(x > 0) {
a[flag] = x % 10;
x /= 10;
flag++;
}
for(int i = 1; i <= flag / 2; i++){
if(a[i] != a[flag-i]) return 0;
}
return 1;
}
bool check3(int x) {
if(x == 2) return 1;
for(int i = 2; i * i <= x; i++)
if(x % i == 0) return 0;
return 1;
}
int main() {
scanf("%d %d", &l, &r);
if(l == 2) printf("2\n");
if(l % 2 == 0) l++;
r = min(9999999, r);
for(int i = l; i <= r; i = i + 2) {
if(check1(i) == 0) continue;
if(check2(i) == 0) continue;
if(check3(i) == 0) continue;
printf("%d\n", i);
}
return 0;
}
乍一看觉得很多的同学举个爪爪!虽然程序的行数是挺多的,但是使用函数对于这道题目来说还是简单多了,函数可以给程序进行分区,对于解决这种多个条件的题目很有用
我们的check1
函数是 一个函数,他之所以是个函数,是因为他是个函数 前面所讲到的优化程序函数,他可以判断一个值的大小是否符合要求,就像这里的if((1000 <= x && x <= 9999) || (100000 <= x && x <= 999999))
就是为了避免程序把一些不可能产生回文数的范围给循环了,加快了程序的速度,不写这个函数的话可能会TLE,除非你运气好
check2
函数和check3
函数就是判断质数和判断回文的函数了,也是很简单的,在此不过多赘述
好了,这就是我们今天的题目,都看到这了,推荐一下当个好人呗!
标签:题目,函数,int,题解,质数,程序,P1217,回文 From: https://www.cnblogs.com/charzie-blog/p/18156028