任意排序的10个整数(0~100),彼此以空格分隔。
可能有多组测试数据,对于每组数据,按照要求排序后输出,由空格分隔。 1. 测试数据可能有很多组,请使用while(cin>>a[0]>>a[1]>>...>>a[9])类似的做法来实现; 2. 输入数据随机,有可能相等。
4 7 3 13 11 12 0 47 34 98
47 13 11 7 3 0 4 12 34 98
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
int comp(const void *a,const void *b){
return *(int *)a-*(int *)b;}
int main(){
int a[10];
int b;
int m=0;
int n=9;
for(int i=0;i<10;++i)
{
scanf("%d ",&b);
if(b%2==0)
a[n--]=b;//偶数右边输入
else
a[m++]=b;//奇数左边输入
}
qsort(a,m,4,comp);//各自排序
qsort(a+m,9-n,4,comp);//各自排序
for(;m>0;m--)
printf("%d ",a[m-1]);//中间往左输出奇数
for(;n<9;n++)
printf("%d ",a[n+1]);//中间往右边输出偶数
}
#include<bits/stdc++.h> //万能头
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main(){
int N=10;
int a[N],b[N],c[N];
while(scanf("%d",&a[0])!=EOF)
{
int J_N=0,O_N=0;
for(int i=1;i<10;i++)
{
scanf("%d",&a[i]);
}
for(int i=0;i<10;i++)
{
if(a[i]%2==0)
{
c[O_N]=a[i];
O_N++;
}
else
{
b[J_N]=a[i];
J_N++;
}
}
sort(b,b+J_N);
sort(c,c+O_N);
for(int i=J_N-1;i>=0;i--)
{
printf("%d ",b[i]);
}
for(int i=0;i<O_N;i++)
{
printf("%d ",c[i]);
}
printf("\n");
}
return 0;
} #include<iostream>
(720)#include<algorithm>
using namespace std;
int a[11];
int b[11];//存放偶数
int c[11];//存放奇数
int main()
{
while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9])
{
int j=0;
int k=0;
for(int i=0;i<10;i++)
{
if(a[i]%2==0){
b[j++]=a[i];//偶数
}else{
c[k++]=a[i];//奇数
}
}
sort(c,c+k,greater<int>());
sort(b,b+j);
for(int i=0;i<k;i++)
cout<<c[i]<<" ";
for(int i=0;i<j;i++)
cout<<b[i]<<" ";
cout<<endl;
}
return 0;
} #include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
int main()
{int a[10]={};
while (cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9])
{vector<int> odd;
vector<int> even;
for(int i=0;i<10;i++)
{if(a[i]%2==0){even.push_back(a[i]);}
else{odd.push_back(a[i]);}
}
sort(even.begin(),even.end());
sort(odd.begin(),odd.end());
for(size_t i=0;i<odd.size();i++)
{cout<<odd[odd.size()-i-1]<<" ";
}
for(size_t i=0;i<even.size();i++)
{cout<<even[i]<<" ";
}
cout<<endl;
}
return 0;
} #include <stdio.h>
#include <stdlib.h>
int cmp(int *a,int *b)
{
return *b-*a;
}
int main()
{
int a[10],h,t,temp; //h:head; t:tail;
while(scanf("%d",&temp)!=EOF)
{
h=0,t=9;
while(h<=t)
{
if(!(h==0 && t==9))scanf("%d",&temp);
if(temp%2!=0)a[h++]=temp;
else a[t--]=temp;
}
qsort(a,h,4,cmp);
qsort(a+h,10-h,4,cmp);
for(t=0;t<h;t++)printf("%d ",a[t]);
for(t=9;t>=h;t--)printf("%d ",a[t]);
printf("\n");
}
} #include<iostream>
#include<algorithm>
bool cmp(int a,int b){
return a>b;
}
using namespace std;
int main(){
int a[10];
while(cin>>a[0]){
int oddNum=0,evenNum=0;
int odd[10],even[10];
if(a[0]%2==0) even[evenNum++]=a[0];
else odd[oddNum++]=a[0];
for(int i=1;i<10;i++){
cin>>a[i];
if(a[i]%2==0) even[evenNum++]=a[i];
else odd[oddNum++]=a[i];
}
sort(odd,odd+oddNum,cmp);
sort(even,even+evenNum);
for(int i=0;i<oddNum;i++){
if(oddNum<10||i<9)
cout<<odd[i]<<' ';
else if(i==9) cout<<odd[i];
}
for(int i=0;i<evenNum;i++){
if(i==evenNum-1) cout<<even[i];
else cout<<even[i]<<' ';
}
}
} while True:
try:
digitList = list(map(int,input().split()))
odd = list(filter(lambda x:x%2==1,digitList))
even = list(filter(lambda x:x%2==0,digitList))
odd.sort(reverse=True)
even.sort()
print(" ".join(map(str,odd)),end=" ")
print(" ".join(map(str,even)))
except Exception:
break
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
bool cmp(int x,int y){
return x>y?true:false;
}
int main(){
vector<int> a(10);
while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9]){
sort(a.begin(),a.end());
vector<int> odd;
vector<int> even;
for(int i=0;i<10;i++)
if(a[i]%2==0)
even.push_back(a[i]);
else
odd.push_back(a[i]);
sort(even.begin(),even.end());
sort(odd.begin(),odd.end(),cmp);
for(int i=0;i<odd.size();i++){
cout<<odd[i]<<" ";
}
for(int i=0;i<even.size()-1;i++){
cout<<even[i]<<" ";
}
if(even.size()>=1){
cout<<even[even.size()-1]<<endl;
}
}
}
#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
// 从大到小排序的比较函数
bool cmp2(int a, int b)
{
return a > b;
}
int a[10]; // 存储数据
int main()
{
while(cin >> a[0])
{
for(int i = 1; i < 10; ++i)
{
cin >> a[i];
}
// 奇数在前面,偶数在后面
int end = 9;
int begin = 0;
int tmp;
while(begin < end)
{
if(a[begin] % 2 == 0)
{
tmp = a[begin];
a[begin] = a[end];
a[end] = tmp;
--end;
}
else
{
++begin;
}
}
// 确定排序位置
for(int i = 0; i < 10; ++i)
{
if(a[i] % 2 == 0)
{
begin = i;
break;
}
}
// 奇数排序
sort(a, a+begin, cmp2);
// 偶数排序
sort(a+begin, a+10);
for(int i = 0; i < 10; ++i)
{
if(i != 0)
{
cout << " ";
}
cout << a[i];
}
cout << endl;
}
return 0;
}
//充分发挥sort的能力嘛,cmp中就可以把所有逻辑写清楚了
#include<cstdio>
#include<algorithm>
using namespace std;
bool cmp(int x,int y)
{
if(x&1 && y&1) //如果是奇数就大到小
return x>y;
if(x%2==0 && y%2==0) //好像用位运算判断偶数不好使??
return x<y;
if(x&1) //奇数在前
return true;
else
return false;
}
int main()
{
int array[10];
while(scanf("%d",&array[0])!=EOF)
{
for(int i = 1; i < 10; i++)
scanf("%d",&array[i]);
sort(array,array+10,cmp); //sort很强的啊
for(int i = 0; i<9; i++)
printf("%d ",array[i]);
printf("%d\n",array[9]);
}//while
return 0;
}//main
压根不用思考,直接sort然后后向打印再前向打印即可。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int a[10]={0};
while(cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9])
{
sort(a,a+10);
for(int i=9;i>=0;--i)
if(a[i]%2==1)
cout<<a[i]<<" ";
for(int i=0;i<=9;++i)
if(a[i]%2==0)
cout<<a[i]<<" ";
cout<<endl;
}
}
#include<stdio.h>//三步走1.从小到大排序2.从后到前输出奇数3.从前向后输出偶数
#define n 10
int main()
{
int a[n],i,j,t;
for(i=0;i<n;i++)//输入
scanf("%d",&a[i]);
for(i=0;i<n-1;i++)//1.排序
for(j=0;j<n-1-i;j++)
if(a[j]>a[j+1])//从小到大
{t=a[j];a[j]=a[j+1];a[j+1]=t;}//交换
for(i=n-1;i>=0;i--) //2.从大到小输出奇数
if(a[i]%2!=0)//奇数
printf("%d ",a[i]);
for(i=0;i<n;i++)//3.从小到大输出偶数
if(a[i]%2==0)//偶数
printf("%d ",a[i]);
} #include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
int a[10] = {0};
int b[10] = {0};
while (cin>>a[0]>>a[1]>>a[2]>>a[3]>>a[4]>>a[5]>>a[6]>>a[7]>>a[8]>>a[9]) {
int p = 0, q = 9; //两个小“指针”
sort(a, a + 10);
for (int i = 9; i > -1; i--) { //从后往前扫描输入的数组
if (a[i]%2 != 0){ //如果是奇数
b[p] = a[i]; //从前往后放
p++;
} else { //如果是偶数
b[q] = a[i]; //从后往前放
q--;
}
}
for (int j = 0; j < 10; ++j) { //输出新数组
printf("%d ", b[j]);
}
printf("\n");
}
return 0;
} 分类sort两次
#include<iostream>
#include<algorithm>
using namespace std;
int ji[10], ou[10];
int ji_len, ou_len;
bool cmp_s2b(int a, int b){
return a < b;
}
bool cmp_b2s(int a, int b){
return a > b;
}
int main(){
int a[10];
while(cin >> a[0] >> a[1] >> a[2] >> a[3] >> a[4] >> a[5] >> a[6] >> a[7] >> a[8] >> a[9]){
ji_len = 0;
ou_len = 0;
for(int i = 0; i < 10; i++){
if(a[i] % 2)
ji[ji_len++] = a[i];
else
ou[ou_len++] = a[i];
}
sort(ji, ji + ji_len, cmp_b2s);
sort(ou, ou + ou_len, cmp_s2b);
for(int i = 0; i < ji_len; i++)
cout << ji[i] << ' ';
for(int i = 0; i < ou_len; i++){
cout << ou[i];
if(i != ou_len - 1)
cout << ' ';
}
}
return 0;
}
import java.util.ArrayList;
import java.util.Collections;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
ArrayList<Integer> even = new ArrayList<>();
ArrayList<Integer> odd = new ArrayList<>();
for (int i = 0; i < 10; i++) {
int n = scanner.nextInt();
if (n%2==0) even.add(n);
else odd.add(n);
}
Collections.sort(even);
Collections.sort(odd);
// odd 降序
for (int i = odd.size()-1; i >=0 ; i--) System.out.print(odd.get(i)+" ");
// even 升序
for (Integer i : even) System.out.print(i + " ");
}
}
} #include<bits/stdc++.h>
int main(){
int n,a[101];
memset(a,-1,sizeof(a));//memset可为int型赋值0或-1,其他值勿用
while(scanf("%d",&n)!=EOF){
a[n]++;
for(int i=0;i<9;i++){
scanf("%d",&n);
a[n]++;
}
for(int i=99;i>=0;i-=2)
if(a[i]>=0)
for(int j=0;j<=a[i];j++)
printf("%d ",i);
for(int i=0;i<=100;i+=2)
if(a[i]>=0)
for(int j=0;j<=a[i];j++)
printf("%d ",i);
printf("\n");
}
}//Hash的应用
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main() {
vector<int>OddArray;
vector<int>OvenArray;
for (int i = 0; i < 10; ++i) {
int input;
cin >> input;
if (input % 2 == 1) {
OddArray.emplace_back(
input);//使用emplace_back避免额外的构造和拷贝开销
} else {
OvenArray.emplace_back(input);
}
}
sort(OddArray.begin(), OddArray.end(), [](const auto & a,
const auto & b) { //a和b是容器中元素的引用
return a > b;
});
sort(OvenArray.begin(), OvenArray.end());
for (const auto& element : OddArray) {
cout << element << ' ';
}
for (const auto& element : OvenArray) {
cout << element << ' ';
}
return 0;
} /// if(lhs%2==1&&rhs%2==0||lhs%2==0&&rhs%2==1) 这是及其错误的,因为当lhs为偶数,rhs为奇数时偶数和奇数必须交换,因为题目要求先输出奇数也可以用sort 中的compare 当 lhs rhs为 奇 偶,奇大 奇小, 偶小,偶大时,必不交换, return true; 其他任意都返回 false交换,所以排序完的数组即为先奇后偶且正反序
#include <iostream>
#include <cstdio>
#include "algorithm"
using namespace std;
bool compare(int lhs,int rhs){
/// if(lhs%2==1&&rhs%2==0||lhs%2==0&&rhs%2==1) 这是及其错误的,因为当lhs为偶数,rhs为奇数时偶数和奇数必须交换,因为题目要求先输出奇数
if(lhs%2==1&&rhs%2==0)
return true; //不交换return true;
else
if(lhs%2==1&&rhs%2==1&&lhs>rhs||lhs%2==0&&rhs%2==0&&lhs<rhs)
return true;
else
return false;
}
int main() {
int str[10];
for(int i=0;i<10;i++){
scanf("%d",str+i);
}
// sort(str,str+10);
// for(int i=9;i>=0;i--){
// if(str[i]%2)
// printf("%d ",str[i]);
// }
// for(int i=0;i<10;i++){
// if(str[i]%2==0){
// printf("%d ",str[i]);
// }
// }
///或者用compare
sort(str,str+10,compare);
for(int i=0;i<10;i++)
{
printf("%d ",str[i]);
}
return 0;
}