输入n个数(n<=10),对其中的素数进行排序(剔除非素数),输出排序后的数列结果。
建议:编写若干函数,用以判断素数,以及对数组进行排序。
输入格式:
第一行是一个正整数t,表示测试的总数。
然后是t行测试数据,每行由整数n开头,后面跟随n个整数。
输出格式:
对于每组测试,输出从小到大排序后的结果(数字之间保留1空格,尾端无多余空格)。
输入样例:
2
5 2 4 7 9 3
6 8 6 4 2 11 7
输出样例:
2 3 7
2 7 11
输入n个数(n<=10),对其中的素数进行排序(剔除非素数),输出排序后的数列结果。
建议:编写若干函数,用以判断素数,以及对数组进行排序。
输入格式:
第一行是一个正整数t,表示测试的总数。
然后是t行测试数据,每行由整数n开头,后面跟随n个整数。
输出格式:
对于每组测试,输出从小到大排序后的结果(数字之间保留1空格,尾端无多余空格)。
输入样例:
2
5 2 4 7 9 3
6 8 6 4 2 11 7
输出样例:
2 3 7
2 7 11
一个实现,如下:
#include <stdio.h>
// 定义函数findPrime(),判断参数num是否是素数,如果是,返回1,否则返回0
int findPrime(int num){
int i;
if(num<2){
return 0;
}
for(i=2;i*i<=num;i++){
if(num%i==0){
return 0;
}
}
return 1;
}
int main(void){
int t,arr[10],i,j,k,p,q,n,temp,prime[10];
scanf("%d",&t); // 获取数据组数t
// 循环n次,以从输入获取n行测试数据,并从小到大打印每组整数中的素数
for(i=0;i<t;i++){
scanf("%d",&n); // 获取每行的整数个数n
k=0;
// 循环n次,以从输入获取当前组的n个整数,并将当前组的素数存入数组prime中
for(j=0;j<n;j++){
scanf("%d",&arr[j]);
if(findPrime(arr[j])==1){
prime[k]=arr[j];
k++;
}
}
// 从小到大排序当前组的素数
for(p=0;p<k-1;p++){
for(q=0;q<k-1-p;q++){
if(prime[q]>prime[q+1]){
temp=prime[q];
prime[q]=prime[q+1];
prime[q+1]=temp;
}
}
}
// 输出当前组排序后的素数
for(p=0;p<k;p++){
printf("%d",prime[p]);
if(p<k-1){
printf(" ");
}
}
printf("\n");
}
return 0;
}
