| 网站首页 | 业界新闻 | 群组 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 185 人关注过本帖
标题:大一小白,求大神给解决一个c++题
只看楼主 收藏
cl704071770
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2017-10-1
结帖率:0
  已结贴   问题点数:20  回复次数:3   
大一小白,求大神给解决一个c++题
输入n个数(n<=100),对这n个数进行奇偶识别,使得所有偶数放在数组的左端,所有奇数放在数组的右端(不要求奇数、偶数有序)。要求:编写子函数,完成上述功能,n的值及n个数均在主函数中输入,并在主函数中输出处理结果。
解题思路:
1、新建两个数组分别放原数组中的奇数和偶数。
2、将奇数数组中的数复制给原数组
3、将偶数数组中的数复制到原数组奇数的后边
2018-01-10 10:50
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:70
专家分:10
注 册:2017-10-5
  得分:10 
这是我写的代码,我也是一名大一新生,希望不吝赐教。
程序代码:
#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++;
    }
}
附件: 您没有浏览附件的权限,请 登录注册
2018-01-10 11:54
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:236
帖 子:5500
专家分:30812
注 册:2011-1-18
  得分:10 
在你原先代码上修改
程序代码:
#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

2018-01-10 12:18
lemonandtree
Rank: 2
等 级:论坛游民
帖 子:70
专家分:10
注 册:2017-10-5
  得分:0 
一脸懵比,我完全看不懂您的代码,表示我还是继续去学习吧......
2018-01-10 12:46







关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.105130 second(s), 8 queries.
Copyright©2004-2018, BCCN.NET, All Rights Reserved