PTA 7-237 特殊排序
分数 10
作者 usx程序设计类课程组
单位 绍兴文理学院
输入一个整数n和n个各不相等的整数,将这些整数从小到大进行排序,要求奇数在前,偶数在后。
输入格式:
首先输入一个正整数T,表示测试数据的组数,然后是T组测试数据。每组测试先输入一个整数n(1<n<100),再输入n个整数。
输出格式:
对于每组测试,在一行上输出根据要求排序后的结果,数据之间留一个空格。
输入样例:
3
5 1 2 3 4 5
3 12 4 5
6 2 4 6 8 0 1
输出样例:
1 3 5 2 4
5 4 12
1 0 2 4 6 8
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
#include<stdio.h>
void swep(int arr[],int sum){ //排序
int i, temp;
for (i = 0; i < sum - 1; i++){
for (int j = 0; j < sum - 1 - i; j++){
if (arr[j] > arr[j + 1]){
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main(){
int group;
int i, n, j;
int ou = 0, ji = 0;
int k = 0, m = 0; //k为奇数;m为偶数
int all[100] = {0}; //存放所有数字
int odd[100] = {0}; //存放奇数
int even[100] = {0}; //存放偶数
scanf("%d", &group);
for(i = 0; i < group; i++){ //循环测试组数
k = 0;
m = 0;
scanf("%d", &n);
for(j = 0; j < n; j++){ //遍历数组
scanf("%d", &all[j]);
}
for(j = 0; j < n; j++){
if(all[j] % 2 == 1){ //判断是否是奇数
odd[k] = all[j]; //将奇数储存在奇数数组中
k = k + 1;
}else{
even[m] = all[j]; //将偶数储存在偶数数组中
m = m + 1;
}
}
swep(odd, k);
swep(even, m);
for(j = 0; j < k; j++){ //输出奇数
printf("%d ", odd[j]);
}
for(j = 0; j < m; j++){ //输出偶数
if(j != m - 1)
printf("%d ", even[j]);
else
printf("%d\n", even[j]); //最后一个数据不空格
}
}
return 0;
}
解题思路:
step1:首先将每组的测试数据遍历到数组中
step2:将奇数和偶数分开储存到另外的两个数组中
step3:调用函数将奇数和偶数排序
step4:按照格式输出即可
归属知识点:
数组
函数
循环结构
条件判断