zoukankan      html  css  js  c++  java
  • 杭厦地区实习生机考体验测试2015(奇偶排序)

    奇偶排序

    输入若干(不超过1000个)非负整数数字,请先取出为奇数的数字按从大到小排序,再取出偶数从小到大进行排序。

    样例输入:12 34 5 7 92 3 8

    样例输出:7 5 3 8 12 34 92

    算法思路:分别从两端开始找到不符合奇偶的数,例如,左端找到偶数,右端找到奇数,两者交换,直到换完;再把左右两端数据分别排序。

    第一轮:12 34 5 7 92 3 8,把这两个交换,变成了3 34 5 7 92 12 8;

    第二轮:3 34 5 7 92 12 8,交换,得到:3 7 5 34 92 12 8;

    交换完毕,用sort函数,分别排序,end。

    学到的新知识:

    ①动态数组怎么判断输入流结束呢?就是在数字后面,【ctrl】和【z】同时按下,显示出来的效果是【^Z】,让输入停止

    ②输入结束的判断语句是while(cin>>a)

    ③swap函数、sort函数,头文件为<algorithm>

    ⑤greater、less函数,头文件为<functional>

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <functional>
     5 
     6 using namespace std;
     7  
     8 int main()
     9 {
    10     vector<int> data;
    11     int a;
    12     while(cin>>a) data.push_back(a);
    13 
    14     int left=0, right=data.size()-1;
    15     while(left <= right)
    16     {
    17         while( (left<=right) && data[left]%2 )
    18             left++;
    19         if(left>right) break;
    20         while( (left<=right) && !(data[right]%2) )
    21             right--;
    22         if(left>right) break;
    23         swap(data[left],data[right]);
    24     }
    25 
    26     //cout<<right<<endl;
    27     int mid = right+1;
    28     if(data[right+1]%2 == 0) mid-=1;
    29     
    30     sort(data.begin(),data.begin()+mid+1,greater<int>());
    31     sort(data.begin()+mid+1,data.begin()+data.size(),less<int>());
    32     
    33     for(int i=0; i<data.size();++i)
    34     {
    35         cout<<data[i]<<" ";
    36     }
    37     cout<<endl;
    38     
    39     //return 0;
    40 }
  • 相关阅读:
    我爱java系列之---【Sublime Text编辑远程Linux服务器上的文件】
    我爱java系列之---【发送请求消息的中间件—okhttp】
    Backpack
    Interleaving String
    Edit Distance
    Longest Common Subsequence
    Jump Game II
    Unique Paths II
    Climbing Stairs
    Triangle -- C3
  • 原文地址:https://www.cnblogs.com/Big-Rabbit/p/4383540.html
Copyright © 2011-2022 走看看