C++:键盘输入n,然后输入n个整数存入数组a,将奇数移到a的前端,要求见下。咋编?

要求:
1)0<n<=100,越界默认100。
2)当n>10时自动随机输入数据,n<=10时手工输入数据。
3)移动时分别保持奇数和偶数的相对顺序。
4)输出每10个数一行,行末不留空格;最后一行不足10个数时要回行。
5)给代码作适当注释。


代码文本:

//#include "stdafx.h"//vc++ 6.0? Maybe should add this line.

#include <iostream>

#include "time.h"

using namespace std;

int main(int argc,char *argv[]){

int a[100],i,j,t,n;

cout << "Enter n...\n";

if(cin >> n,n>100 || n<1)

n=100;

if(n>10){//n>10时自动随机输入并显示

srand((unsigned)time(NULL));

for(i=0;i<n;){

cout.width(6);//输出格式占宽6列右对齐

cout << (a[i++]=rand());

if(i%10==0 || i==n)//输出10个数或最后一行末回车

cout << endl;

}

}

else{//n<=10时手工输入显示

cout << "Please enter " << n << " integer(s)(SEP by ' ')...\n";

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

cout << endl;

}

for(i=0;i<n;i++){//把奇数移到a前端算法

if((a[i]&1)==0){

for(j=i+1;j<n;j++)

if(a[j]&1){//在i后找到奇数则保存至t

for(t=a[j];j>i;a[j--]=a[j-1]);//a[i]~a[j]顺序向后移一位

a[i]=t;//把a[j]拷贝到a[i];这样奇偶数的相对顺序不变

break;

}

if(j==n)//若i后无奇数了就中止外for操作

break;

}

}

cout << "OUT:\n";

for(i=0;i<n;){//输出

cout.width(6);//输出格式占宽6列右对齐

cout << a[i++];

if(i%10==0 || i==n)//输出10个数或最后一行末回车

cout << endl;

}

return 0;

}

温馨提示:答案为网友推荐,仅供参考
第1个回答  2020-09-14

第2个回答  2020-09-14
要完成把一个数组中所有的奇数移到前端的操作,实质上还是一个排序的操作。只是判断大小的情况是,如果前面的数是偶数,而后面的数是奇数,那么就交换这一对数。按这个原则进行排序,就可以了。