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

大一小白,求大神给解决一个c++题

cl704071770 发布于 2018-01-10 10:50, 1414 次点击
输入n个数(n<=100),对这n个数进行奇偶识别,使得所有偶数放在数组的左端,所有奇数放在数组的右端(不要求奇数、偶数有序)。要求:编写子函数,完成上述功能,n的值及n个数均在主函数中输入,并在主函数中输出处理结果。
解题思路:
1、新建两个数组分别放原数组中的奇数和偶数。
2、将奇数数组中的数复制给原数组
3、将偶数数组中的数复制到原数组奇数的后边
3 回复
#2
lemonandtree2018-01-10 11:54
这是我写的代码,我也是一名大一新生,希望不吝赐教。
程序代码:
#include<iostream>
using namespace std;
const int n=10;//定义常变量n更方便改变数组长度
#include<iomanip>
void h(int a[n]);
void main()
{
    int i,a[n];
    for(i=0;i<n;i++)
      cin>>a[i];
     h(a);//将数组首地址作为参数
     for(i=0;i<n;i++)
     cout<<setw(5)<<a[i];
}
void h(int a[n])
{
    int b[n],c[n],i,j,k;//n个数中最多有n个偶数n个奇数
    for(i=0,j=0,k=0;i<n;i++)
    {
        if(a[i]%2==0)//判别偶数
        {
            b[j]=a[i];
            j++;//计数器:记录偶数的个数
        }
        else
        {
            c[k]=a[i];
            k++;
        }
    }
    i=0;
    while(i<j)
    {
        a[i]=b[i];//先将偶数复制给数组;
        i++;
    }
    k=0;
    while(i<n)
    {
        a[i]=c[k];//再将奇数复制给数组
        k++;
        i++;
    }
}
只有本站会员才能查看附件,请 登录
#3
rjsp2018-01-10 12:18
在你原先代码上修改
程序代码:
#include <iostream>
using namespace std;

void h( int a[], size_t n );

int main( void )
{
    size_t n;
    int a[100];

    cin >> n;
    for( size_t i=0; i!=n; ++i )
        cin >> a[i];

    h( a, n );

    for( size_t i=0; i!=n; ++i )
        cout << a[i] << ' ';
    cout << endl;
}

void h( int a[], size_t n )
{
    size_t even_n=0, odd_n=0;
    int even[100], odd[100];

    for( size_t i=0; i!=n; ++i )
    {
        if( a[i]%2 == 0 )
            even[even_n++] = a[i];
        else
            odd[odd_n++] = a[i];
    }

    for( size_t i=0; i!=even_n; ++i )
        a[i] = even[i];
    for( size_t i=0; i!=odd_n; ++i )
        a[even_n+i] = odd[i];
}

按照C++的风格重写代码
程序代码:
#include <iostream>
#include <vector>
#include <iterator>
#include <functional>
#include <algorithm>
using namespace std;

int main( void )
{
    vector<int> arr;

    // 输入
    size_t n;
    cin >> n;
    copy_n( istream_iterator<int>(cin), n, back_inserter(arr) );

    // 排序
    std::stable_sort( begin(arr), end(arr), [](int a, int b){ return a%2==0 && b%2==1; } );

    // 输出
    copy( begin(arr), end(arr), ostream_iterator<int>(cout," ") );
    cout << endl;
}

输入
7
0 1 2 3 4 5 6
输出
0 2 4 6 1 3 5

#4
lemonandtree2018-01-10 12:46
一脸懵比,我完全看不懂您的代码,表示我还是继续去学习吧......
1