• 调整输入数据数组顺序,奇数在前,偶数在后


    题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。

    方法一:最直接的办法是再写一个和原来数组大小相同的空间的数组,然后扫描两边数组,第一遍,如果是奇数,把数字放到新的数组中;第二遍,如果是偶数,把数组放到新的数组中。

    #include "stdafx.h"
    
    #include<vector>
    #include <iostream>
    using namespace  std;
    
    //存放输入的数组
    vector<int> arr;
    //存放排序好的数组
    vector<int> newarr;
    
    //排序函数
    void ReorderOddEven()
    {
    	
    	int number;//存放读到的数字
            //此处有一个bug,当先输入一个空格在输入一个回车时,无法判断是回车
    	while(cin.get()!='
    ')//判断是否是回车键
    	{
    
    		cin.unget(); //如果发现不是回车,则把读到的数据放回去
                    cin>>number; 
    		arr.push_back(number);
    	}
    	int i=0;
    	int  j=arr.size();
    	for(int i=0;i<j;i++)
    	{
    		if (arr[i]%2==1)//判断,如果是奇数,则存到新的数组
    			newarr.push_back(arr[i]);
    	}
    
    	for(int i=0;i<j;i++)
    	{
    		if (arr[i]%2==0)//判断,如果是偶数,则存到新的数组
    			newarr.push_back(arr[i]);
    	}
    	
    }
    
    //输出排好序的数组
    void printEven()
    {
    	int i;
    	for(i=0;i<newarr.size();i++)
    		cout<<newarr[i]<<" ";
    }
    
    
    int main()
    {
    	
    	cout<<"请输入您要输入的序列"<<endl;
    	ReorderOddEven ();
    	cout<<"排好序的序列:"<<endl;
    	 printEven();
    	system("pause");
    }
            
    

    方法二:如果不考虑顺序问题的话,可以从两头向中间扫描,前后指针分别遇到偶数和奇数就停下来,然后交换他们。

    #include "stdafx.h"
    
    #include<vector>
    #include <iostream>
    using namespace  std;
    vector<int> arr;
    void ReorderOddEven()
    {
    	
    	int number;
    	while(number=cin.get()!='
    ')
    	{
    		cin.unget(); 
            cin>>number; 
    		arr.push_back(number);
    	}
    	int i=0;
    	int  j=arr.size()-1;
    	while(i<j)
    	{
    		
    		while(i<j&&(arr[i]%2==1))
    			i++;
    		while(i<j&&(arr[j]%2==0))
    			j--;
    		swap(arr[i],arr[j]);
    	}
    }
    void printEven()
    {
    	int i;
    	for(i=0;i<arr.size();i++)
    		cout<<arr[i]<<" ";
    }
    
    
    int main()
    {
    	
    	vector<int> arr;
    	cout<<"请输入您要输入的序列"<<endl;
    	ReorderOddEven ();
    	cout<<"排好序的序列:"<<endl;
    	 printEven();
    	system("pause");
    }
    

      

  • 相关阅读:
    【转】一句话设计模式
    【转】Bad Smell(代码的坏味道)
    【转】[重构]Primitive Obsession
    【转】22种代码的坏味道,一句话概括
    【转】C#中的implicit 和 explicit
    【转】100本最棒的英文侦探小说
    [转]Visual Studio调试之符号文件
    【转】简要分析unity3d中剪不断理还乱的yield
    apache https配置步骤
    apache https配置步骤
  • 原文地址:https://www.cnblogs.com/shixisheng/p/5842495.html
Copyright © 2020-2023  润新知