奇数单增序列

GitHub跳转原题关系图返回列表

用列表推导式筛出奇数,再排序并用逗号连接输出。

OJ: noi_openjudge

题目 ID: ch0110-02

难度:入门

标签:排序python

日期: 2026-07-30 23:01

题意

从给定正整数序列中保留所有奇数,按升序输出,元素之间必须用逗号分隔。

思路

列表推导式在读入时完成筛选:number % 2 == 1 的数就是奇数。对结果调用 sorted,最后将整数转为字符串,用 ",".join(...) 统一控制分隔符,避免处理末尾逗号。

代码

Python代码

python
input()
odd_numbers = [number for number in map(int, input().split()) if number % 2 == 1]

print(",".join(map(str, sorted(odd_numbers))))

C++代码

cpp
#include <cstdio>
#include <algorithm>
using namespace std;

int n,t;
int a[1000];
int cnt = 0;

int main(){
	scanf("%d",&n);
	int i;
	for(i=1;i<=n;i++){
		scanf("%d",&t);
		if( t % 2 == 1){
			cnt++;
			a[cnt] = t;
		}
	}
	sort(a+1,a+cnt+1);
	printf("%d",a[1]);
	for(i=2;i<=cnt;i++)
		printf(",%d",a[i]);
	

	return 0;
}

复杂度

设筛出的奇数个数为 mm,时间复杂度为 O(n+mlogm)O(n + m \log m),空间复杂度为 O(m)O(m)

总结

当输出格式有固定分隔符时,join 比逐项输出更简洁,也不会多输出一个逗号。