现有若干行正整数,请你写一段程序分别统计每一行中有多少个质数。
输入格式:
第一行为一个整数n(0<n<=10),代表测试用例行数。后边是n行,每行为若干个用空格分隔的正整数。这些正整数的最后是-1,表示此行结束。
输出格式:
为n行,每行一个整数,对应于输入的每一行中质数的个数。
测试用例保证输入合法,且所有整数可以用int存储
输入样例:
2
37 54 18 92 39 45 8 84 75 15 33 83 85 54 81 33 89 -1
17 19 60 77 2 92 38 63 92 69 91 94 11 -1
输出样例:
3
4
代码如下:
#include<stdio.h>
int fack(int n)
{
int i = 2;
for (i = 2; i < n; i++)
if (n % i == 0)
return 0;
return 1;
}
int main()
{
int arr[10][1000] = { 0 };
int atr[10] = { 0 };
int n, i,j,zh;
scanf("%d", &n);
for (i = 0; i < n; i++)
{
j = 0;
scanf("%d", &zh);
while (zh != -1)
{
arr[i][j] = zh;
j++;
if (fack(zh) == 1)
atr[i]++;
scanf("%d", &zh);
}
}
for (i = 0; i < n; i++)
printf("%d\n",atr[i]);
return 0;
}
这个代码中我引用了函数(判断是否使质数),并且使用了二维数组
如果有哪位对引用函数不清楚,可以评论我再做解释
下面我写一下不用二维数组的代码
#include<stdio.h>
int fack(int n)
{
int i = 2;
for (i = 2; i < n; i++)
if (n % i == 0)
return 0;
return 1;
}
int main()
{
int n;//行数
scanf("%d", &n);
int i, k,y=0;
for (i = 0; i < n; i++)
{
y = 0;
while (5)
{
scanf("%d", &k);
if (k == -1)
goto again;
if (fack(k) == 1)
y++;
}
again:
printf("%d\n", y);
}
return 0;
}
在这里我没有用二维数组,大家可以参考
代码中的goto again是goto语句,不建议在代码中多次使用,会导致代码结构混乱