注册 登录
编程论坛 C++教室

C++一道练习题

teifion666 发布于 2011-05-25 22:07, 714 次点击
   输入10个数,将10个整数按顺序排列输出,并且奇数在前,偶数在后。如果输入的10个数是:10 9 8 7 6 5 4 3 2 1 ,则输出:1 3 5 7 9 2 4 6 8 10
5 回复
#2
Pirelo2011-05-25 23:49
程序代码:
#include<cstring>
#include<iostream>
using namespace std;
void main()
{
    int array[10],temparray[10],temp;
    int *parray=array ;
    cout<<"please input 10 numbers:"<<endl;
    for(int i=0;i<10;i++)
    {
        cin>>array[i];
    }

    //将array按升序排序
    for(i=1;i<10;i++)
    {

        for(int j=0;j<9;j++)
        {
            if(array[j]>=array[j+1])
            {
                temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }
    }

    //将排序后的array拷贝一份到temparray
    for( i=0;i<10;i++)
    {
        temparray[i]=array[i];
    }

    //将奇数元素放到数组array的前面一部分
    for( i=0;i<10;i++)
    {
        if(0!=(temparray[i]%2))
        {
        *parray=temparray[i];
        parray++;
        }
    }

    //将偶数元素放到数组array的后面一部分
    for( i=0;i<10;i++)
    {
        if(0==(temparray[i]%2))
        {
        *parray=temparray[i];
        parray++;
        }
    }

    //输出奇偶排序后的array
    for( i=0;i<10;i++)
    {
        cout<<"array["<<i<<"]="<<array[i]<<endl;
    }      
    system("pause");
}
尝试写了一段代码,基本能实现楼主的要求,但自我感觉算法的效率偏低,期待高手带来新的算法吧。
#3
format1232011-05-26 07:35
程序代码:
#include <IOSTREAM>
using namespace std;
#include <algorithm>

int main()
{
    int num[10],temp[10],j=0;
    for(int i=0;i<10;i++)
        cin>>num[i];
    sort(num,num+10);
    for (i=0;i<10;i++)
    {
        if (num[i]%2==1)
        {
            temp[j++]=num[i];
        }
    }
    for (i=0;i<10;i++)
    {
        if (num[i]%2==0)
        {
            temp[j++]=num[i];
        }
    }
    for (i=0;i<10;i++)
    {
        cout<<temp[i]<<" ";
    }
}
用sort
#4
rjsp2011-05-26 08:24
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;

inline static bool foo( int a, int b )
{
    if( (a&1) && !(b&1) ) // a奇b偶
       return true;
    if( !(a&1) && (b&1) ) // a偶b奇
       return false;

    return a<b;
}

int main()
{
    int buf[] = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }; // 1 3 5 7 9 2 4 6 8 10

    // 输出原串
    const size_t len = sizeof(buf)/sizeof(buf[0]);
    copy( buf+0, buf+len, ostream_iterator<int>(cout," ") );
    cout << '\n';

    // 排序
    sort( buf+0, buf+len, foo );

    // 输出排序后的字符串
    copy( buf+0, buf+len, ostream_iterator<int>(cout," ") );
    cout << '\n';

    return 0;
}
#5
lucky5635912011-05-26 08:54
用一个筛选,将奇数和偶数分开,再用冒泡排序分别排序,最后合并
#6
lianjiecuowu2011-05-26 13:15
#include <iostream>
using namespace std;
int main()
{
    const int N=10;
    int data[N];
    int i,loop,temp;
    cout<<"please input 10 numbers:"<<endl;
    for(i=0;i<10;i++)
    cin>>data[i];
    for(i=0;i<=N-2;i++)
    {
       for(loop=N-2;loop>=i;loop--)
       {
           if(data[loop]>data[loop+1])
           {
              temp=data[loop+1];
              data[loop+1]=data[loop];
              data[loop]=temp;
            
           }
           
       }
    }
    for(i=0;i<N;i++)
    cout<<data[i]<<'\t'<<endl;
    for(i=0;i<N;i+=2)
    cout<<data[i]<<'\t';
    for(i=1;i<N;i+=2)
    cout<<data[i]<<'\t';
   
    system("pause");
    return 0;   
}
1