c++习题36-奇数单增序列
目录
一,题目
二,思路
三,代码
一,题目
给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。
输入描述
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。
输出描述
增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。
用例输入 1
10
1 3 2 6 5 4 9 8 7 10
用例输出 1
1,3,5,7,9
二,思路
- 奇数就是不能整除2的数,因此,在输入数据的同时也可以判断该数是否时奇数,如果是奇数,则将对应的数据添加到容器中。
- 向vector容器中添加数据一般都是从容器最后开始添加(在这道题中,不管是从容器开头添加数据还是末尾添加,都对程序没有影响,因为后面会对存储结果的vector容器进行升序排序)。
- 根据题目,在编写程序时,会有数组的排序(可以使用快排,冒泡等),如果是创建数组类型变量来存储结果数据,则需要额外写排序算法,会增加一定的代码量,而最省时的就是创建vector容器,并用sort函数来对整个容器进行升序排序(默认是升序,如果想要降序,可以自定义比较函数,作为第三个参数传入sort函数)。
- 在输出结果时,需要注意的就是最后一个数据的末尾不能有逗号(使用if判断即可)。
也可以用三元运算符:cout << (i > 0 ? "," : "") << j[i];
三,代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
cin>>N;
vector<int>n(N),j;
for (int i=0;i<N;i++) {
cin >> n[i];
if (n[i]%2!=0) {
j.push_back(n[i]);
}
}
sort(j.begin(),j.end());
for (int i=0;i<j.size();i++) {
if (i > 0) cout<<",";
cout<<j[i];
}
return 0;
}
有问题请在评论区留言或者是私信我,回复时间不超过一天。