任意排序的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; }