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;
}