ss 判断素数有问题,修改如下:
#include <math.h>
int ss(int x)
{
int i;
int flag = 1;
for (i = 2; i <= sqrt(x); i++) // 如果你不想引入 math.h ,直接 i <= x / 2 吧
{
if (x % i == 0)
{
flag = 0;
break;
}
}
return flag;
}
值为2的时候没走循环,你把那个return 1放循环后面试试
void f (int * p)//这里上面说过了,变量名是i,但是类型是int *,可以保存其他变量的地址。
{
*p=100;//上面也说过,*p就是i,i就是*p
}
int main()
{
int i=9;//这是一个普通的定义和赋值
f(&i);//这里要是调用函数,用&i,把i的地址传递给函数的参数p
cout<<"i"<<i;//结果应该是100
return 0;
}
关于2不是素数的问题,是因为判断素数的方法出现了问题,常见的方法是从2到该数的平方根进行遍历,判断是否有因子,但是2的平方根仍为2,因此会错误地将2判断为非素数。解决方法是特判2,将2单独判断,判断其他数则从3开始遍历,每次加2。
具体代码实现如下:
def is_prime(num):
"""判断一个数是否为素数"""
if num == 2: # 特判2
return True
if num < 2 or num % 2 == 0: # 排除小于2以及偶数
return False
for i in range(3, int(num ** 0.5) + 1, 2): # 从3到num的平方根进行遍历,每次加2
if num % i == 0:
return False
return True
关于输出空格的问题,可以在每个数输出时加上空格,最后一个数单独输出即可。代码实现如下:
nums = [1, 2, 3, 4, 5]
for i in range(len(nums)):
if i != len(nums) - 1: # 当前不是最后一个数,加上空格
print(nums[i], end=' ')
else: # 当前是最后一个数,单独输出
print(nums[i])