输入一个长度为10的整数数组,将其中出现的素数首尾交换,即第一个素数与最后一个素数交换,第二个素数与倒数第二个素数交换......,非素数保持位置不变,输出交换以后的数组。
#include<stdio.h>
int isprime(int n) {
if(n == 2 || n == 3)
return 1;
if (n < 2 || n % 2 == 0)
return 0;
for (int i = 2; i * i <= n; i++)
if (n % i == 0)
return 0;
return 1;
}
int main() {
int a[10], p[10], i, j, t;
for (i = 0, j = 0; i < 10; i++) {
scanf("%d", &a[i]);
if (isprime(a[i]))
p[j++] = i;
}
for (i = 0; i < j / 2; i++) {
t = a[p[i]];
a[p[i]] = a[p[j - i - 1]];
a[p[j - i - 1]] = t;
}
for (i = 0, j = 0; i < 10; i++)
printf("%d ", a[i]);
return 0;
}
追问能不能把最后面一个数的空格去掉啊?
我先让系统输出前9个 最后一个a[10]单独输出 但是结果最后一个数就变了
可以去掉啊,判断是不是第一个数,是的话不输出空格,不是输出空格,再输出数字就可以了
变了??不会吧。我们已经把数处理好了,那么先把前9个输出,再输出最后一个,为什么会变