【信息学奥赛】在一个包含N个整数的数组中找到第一个质数
💖The Begin💖点点关注,收藏不迷路💖
|
编写一个函数,用于在一个包含N个整数的数组中找到第一个质数,若有则返回函数的地址;否则返回NULL(空指针)。
输入:
两行,第一行为N,第二行为N个数据元素
输出:
素数的地址和它本身,如果不存在,输出can’t find!
样例输入 1:
4
8 6 9 7
样例输出 1:
3 7
样例输入 2:
4
8 6 9 77
样例输出 2:
can't find!
裁判测试程序样例:
#include<stdio.h>
#include<math.h>
int n,a[10001];
int isprime(int n){
int i=0;
if(n<2)return 1;
if(n==2)return 0;
for(i=2;i<=sqrt(n);i++){
if(n%i==0)return 0;
}
return 1;
}
int *find();
int main() {
int i=1;
scanf("%d",&n);
for(;i<=n;++i)
scanf("%d",a+i);
int *p=find();
if(p!=NULL){
printf("%d %d\n",p-a-1,*p);
}else{
printf("can't find!");
}
printf("\n");
return 0;
}
/* 请把您的答案填写在这里 */
int *find() {
for (int i = 1; i <= n; ++i) {
if (isprime(a[i])) {
return &a[i];
}
}
return NULL;
}
这段代码实现的思想是:
-
首先定义了一个
isprime
函数,用于判断一个数是否为质数。如果一个数小于2,直接返回0;如果一个数等于2,返回1;否则从2开始到该数的平方根之间进行遍历,如果能被整除则说明不是质数,返回0,否则返回1。 -
然后定义了一个
find
函数,用于在输入的整数数组中找到第一个质数。通过遍历数组的方式,对每个元素调用isprime
函数,如果找到了质数,则返回该质数的地址,否则返回空指针。 -
在
main
函数中,首先读取输入的整数N,然后依次读取N个整数到数组中。接着调用find
函数找到第一个质数,如果找到了,则输出该质数的位置和值,如果没有找到,则输出"can’t find!"。
整体来说,这段代码通过定义函数来实现质数判断和查找操作,然后在main
函数中调用这些函数完成任务。
💖The End💖点点关注,收藏不迷路💖
|