c语言输入一个长度为10的整数数组,将其中出现的素数首尾交换 非素数保持位置不变?

输入一个长度为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个输出,再输出最后一个,为什么会变

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-04-19
#include<stdio.h>
int main()
{
int i,j,k,x,y,z,t,a[10],b[10];
for(i=0;i<10;i++)
{
scanf("%d",&a[i]);
}
for(i=0;i<10;i++)
{
for(j=2;j<a[i];j++)
if(a[i]%j==0)
{
b[i]=0;
break;
}
if(j>=a[i])
{
b[i]=a[i];
}
}
for(x=9,k=0;k<x;)
{
if(b[k]==0)
{k++;}
if(b[x]==0)
{x--;}
if(b[k]!=0 && b[x]!=0)
{
y=b[x];
b[x]=b[k];
b[k]=y;
k++;
x--;
}
}
for(z=0;z<10;z++)
{
if(b[z]!=0)
a[z]=b[z];
}
for(t=0;t<10;t++)
if(t==0)printf("%d",a[t]);
else printf(" %d",a[t]);
}