1 条题解

  • 1
    @ 2022-6-18 14:28:00

    此题没有含金量,纯模拟。

    首先判断素数,请移步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
上传者