蒜术师给了你一个 10 个整数的序列,要求对其重新排序。排序要求:
奇数在前,偶数在后;
奇数按从大到小排序;
偶数按从小到大排序。
输入格式
输入一行,包含 10 个整数,彼此以一个空格分开,每个整数的范围是大于等于 0,小于等于 100
输出格式
按照要求排序后输出一行,包含排序后的 10 个整数,数与数之间以一个空格分开。
Sample Input
4 7 3 13 11 12 0 47 34 98Sample Output
47 13 11 7 3 0 4 12 34 98
解题思路
1.定义奇偶两个数组
2.判断奇偶数放入两个数组中
3.定义函数自动排序两个数组
4.循环输出数组
注意:奇数从小到大;偶数从大到小
数与数之间以一个空格分开
奇偶数数量不知定义奇偶数数组时会有多余空数组
输出时需要注意不能输出所有的数
在输出下一个数为0时需要停止
定义并排序函数
#include<iostream>
#include<algorithm>
using namespace std;
int num[10];//定义输入的数组
int ji[10];//定义奇数数组
int ou[10];//定义偶数数组
int j=0;//奇数数的个数
int o=0;//偶数数的个数
void onlyj(int n){
for(int i=0;i<n;i++){
if(num[i]%2==1){
ji[j]=num[i];
j++;
}else{
ou[o]=num[i];
o++;
}//判断输入数组奇偶性并分别放入奇偶数组中
}
sort(ji,ji+j,greater<int>());//排序奇数数组从大到小
sort(ou,ou+o);//排序偶数大小从小到大
}//定义函数onlyj()自动排序并输出两个数组ji[](从大到小)ou[](从小到大)
输入函数并得到奇偶两个数组
奇数数组从大到小;偶数数组从小到大
输出(以奇数数组为例)
while(1){
if(ji[i]!=0){
printf("%d ",ji[i]);
}else{
break;
}
i++;
}//输出奇数数组当输出为0时停止
当输出为0时停止
最终代码
#include<iostream>
#include<algorithm>
using namespace std;
int num[10];//定义输入的数组
int ji[10];//定义奇数数组
int ou[10];//定义偶数数组
int j=0;//奇数数的个数
int o=0;//偶数数的个数
void onlyj(int n){
for(int i=0;i<n;i++){
if(num[i]%2==1){
ji[j]=num[i];
j++;
}else{
ou[o]=num[i];
o++;
}//判断输入数组奇偶性并分别放入奇偶数组中
}
sort(ji,ji+j,greater<int>());//排序奇数数组从大到小
sort(ou,ou+o);//排序偶数大小从小到大
}//定义函数onlyj()自动排序并输出两个数组ji[](从大到小)ou[](从小到大)
int main(){
int n=10;
int m=0;
for(int i=0;i<n;i++){
cin>>num[i];
if(num[i]==0){
m=1;
}
}//输入数组到num[]数组中
int i=0;
onlyj(n);
while(1){
if(ji[i]!=0){
printf("%d ",ji[i]);
}else{
break;
}
i++;
}//输出奇数数组当输出为0时停止
i=0;//重置i
while(1){
if(ou[i+2]!=0){
printf("%d ",ou[i]);
}else{
printf("%d ",ou[i]);
printf("%d",ou[i+1]);//最后输出没有“ ”需要分开输出
break;
}
i++;
}//输出偶数数组当输出为0时停止
return 0;
}
最后输出时需注意最后输出的数后没有空格
需要和前面的输出分开