奇偶数分离
-
描述
-
有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。
-
输入
-
第一行有一个整数i(2<=i<30)表示有 i 组测试数据;
每组有一个整型偶数n。
输出
-
第一行输出所有的奇数
第二行输出所有的偶数
样例输入
-
2 10 14
样例输出
-
1 3 5 7 9 2 4 6 8 10 1 3 5 7 9 11 13 2 4 6 8 10 12 14
//当初没经验,就老想把输入的所有数据都保存下来,然后一步步进行操作,做法是建立动态数组
代码如下:
#include<iostream>
using namespace std;
int main()
{
void fuc1(int q);
void fuc2(int q);
int n,i;
cin>>n;
int *p=new int[n];
for(int i=0;i<n;i++)
{
cin>>p[i];
}
for(i=0;i<n;i++)
{
fuc1(p[i]);
fuc2(p[i]);
}
return 0;
}
void fuc1(int q)
{
for(int j=1;j<=q;j++)
{
if(j%2!=0)
{
cout<<j<<" ";
}
}
cout<<endl;
}
void fuc2(int q)
{
for(int j=1;j<=q;j++)
{
if(j%2==0)
{
cout<<j<<" ";
}
}
cout<<endl<<endl;
}以上出现的情况就是,代码长,程序看起来复杂,而且还特别容易出错,要对指针以及数组的知识有所了解。问题的关键是--容易出错。所以这种做法不提倡!!
然后,我下面列出了改良版的做法:
#include<iostream>
using namespace std;
int main()
{
int n,a;
cin>>n;
while(n--)
{
cin>>a;
for(int i=1;i<=a;i++)
{
if(i%2!=0)
{
cout<<i<<" ";
}
}
cout<<endl;
for(int i=1;i<=a;i++)
{
if(i%2==0)
{
cout<<i<<" ";
}
}
cout<<endl;
}
return 0;
}
代码只有28行,既简洁又不容易出错!!!
然而对于这个题还可以这样做:(更加简便)
#include<stdio.h>
02.
int
main()
03.
{
04.
int
n;
05.
scanf
(
"%d"
,&n);
06.
int
a;
07.
while
(n--)
08.
{
09.
scanf
(
"%d"
,&a);
10.
for
(
int
i=1;i<=a;i+=2)
11.
printf
(
"%d "
,i);
12.
puts
(
""
);
13.
for
(
int
i=2;i<=a;i+=2)
14.
printf
(
"%d "
,i);
15.
puts
(
""
);
16.
}
17.
}
-
第一行有一个整数i(2<=i<30)表示有 i 组测试数据;