题目描述
有一个整型偶数n(2<= n <=10000),你要做的是:先把1到n中的所有奇数从小到大输出,再把所有的偶数从小到大输出。
输入描述
输入第一行有一个整数i(2<=i<30)表示有 i 组测试数据;每组有一个整型偶数n。
输出描述
输出第一行输出所有的奇数。第二行输出所有的偶数。
思路
法1
-
根据题目的描述,按序写下来即可。
-
用n%2==0来判断奇偶,若“真”,则为奇数,若“假”,则为偶数。
-
然后将奇数和偶数分别存进不同的数组中,最后将数组输出。
法2
-
用while循环,i--,来表示测试用例组数
-
根据奇数和偶数相隔1个数的规律,可以用循环加2的方式,分别从1(奇数)和2(偶数)开始循环,然后分别输出奇数和偶数,就可以省去再用数组存储的步骤。
具体实现
法1
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
cin>>i; //输入i组测试数据
for(int j=0; j<i; j++){
int n;
int a[1000]; //存奇数
int b[1000]; //存偶数
int cnt1=0,cnt2=0;
cin>>n;
for(int k=1; k<=n; k++){
if(k%2==0) b[cnt2++]=k; //是偶数,存偶数数组
else a[cnt1++]=k; //是奇数,存奇数数组
}
for(int m=0; m<cnt1; m++) //输出奇数
cout<<a[m];
cout<<endl;
for(int m=0; m<cnt2; m++) //输出偶数
cout<<b[m];
cout<<endl;
}
return 0;
}
法2
#include<bits/stdc++.h>
using namespace std;
int main(){
int i;
cin>>i; //输入i组测试数据
while(i--){
int n;
cin>>n;
for(int k=1; k<=n; k+=2) //输出奇数
cout<<k<<" ";
cout<<endl;
for(int k=2; k<=n; k+=2) //输出偶数
cout<<k<<" ";
cout<<endl;
}
return 0;
}
小结
-
题目难度:简单。注意一些格式、换行之类的书写,不要出错。
-
法1比较直观,按描述写即可,但是时间复杂度和空间复杂度度都很大。
-
法2为优化后代码,比较简洁,且降低了空间复杂度。
-
代码能优化还是要优化一下,多思考,也会对编程思想和能力提升有帮助!