目录
题目描述:
思路解析:
质数判断函数:
反转函数:
右截断素数判断函数:
左可截断素数:
具体代码:
题目描述:
左截断素数是不包含 0 位的素数,当连续删除第一个数字时,结果始终为素数。
可右截断的素数是不包含 0 位的素数,当连续删除最后一位时,结果始终为素数。
创建一个将整数作为参数的函数,并且:
如果整数只是一个可左截断的素数,则返回 "left"。
如果整数只是一个可右截断的素数,则返回 "right"。
如果整数是两者,则返回 "both"。
否则,返回 False。
输入输出格式
输入格式
输入一个整数;
输出格式
输出一个字符串,表示输入整数的素数类型。
输入输出样例1
输入
9137
输出
left
解释(可选)
因为9137 137 37 7都是质数。
输入输出样例2
输入
5939
输出
right
解释(可选)
因为5939 593 59和5都是素数。
思路解析:
轻松的做法是一个功能定义一个函数,根据题干一个功能对应一个函数。
质数判断函数:
int check(int n)
{
if (n < 2)
return 0;
else
if (n == 2 || n == 3)
return 1;
else
if (n % 6 != 1 && n % 6 != 5)
return 0;
else
{
int i = 5;
while (i * i <= n)
{
if (n % i == 0 || n % (i + 2) == 0)
return 0;
i += 6;
}
}
return 1;
}
这是一种快速判断一个数字是不是质数的函数,第一次使用是在如下文章:
循环结构------素数和_循环结构素数-CSDN博客
反转函数:
int turn(int n)
{
int count = 0;
while (n)
{
count = count * 10 + n % 10;
n /= 10;
}
return count;
}//用于反转一个整数,例如123反转成321。
右截断素数判断函数:
int right(int n)
{
while (n)
{
if (check(n))
n /= 10;//每次进行一次质数判断便在右边截去一位。
else
return 0;
}
return 1;
}
左可截断素数判断函数:
int left(int n)
{
while (n)
{
if (check(n))
{
n=turn(n);
n /= 10;
n=turn(n);
}
else
return 0;
}
return 1;
}
因为我们这次要截去数字的最高位,所以我们要将数字反转一次,截取反转后的最左边数字,然后再次反转数字,循环往复就能达到截取最高位的效果。
具体代码:
#include<stdio.h>
int check(int n)
{
if (n < 2)
return 0;
else
if (n == 2 || n == 3)
return 1;
else
if (n % 6 != 1 && n % 6 != 5)
return 0;
else
{
int i = 5;
while (i * i <= n)
{
if (n % i == 0 || n % (i + 2) == 0)
return 0;
i += 6;
}
}
return 1;
}
int turn(int n)
{
int count = 0;
while (n)
{
count = count * 10 + n % 10;
n /= 10;
}
return count;
}
int right(int n)
{
while (n)
{
if (check(n))
n /= 10;
else
return 0;
}
return 1;
}
int left(int n)
{
while (n)
{
if (check(n))
{
n=turn(n);
n /= 10;
n=turn(n);
}
else
return 0;
}
return 1;
}
int main(void)
{
int n;
scanf("%d", &n);
int right_flag = right(n);
int left_flag = left(n);
if (right_flag && left_flag)
printf("both");
else if (right_flag)
printf("right");
else if (left_flag)
printf("left");
else
printf("False");
}
如此就完成了这道题目。
备注:
以这种方式来完成这道题实际上运行的时候多了很多步骤,但是这样写能很容易让基础差点的同学快速领会,更重要的是在趣味算法篇章中,我更想用轻松有意思易看懂的方法来讲述和解决问题。