奇数单增序列

Time Limit: 1 Sec  Memory Limit: 128 MB

Description

给定一个长度为N(不大于500)的正整数序列,请将其中的所有奇数取出,并按升序输出。

Input

共2行:
第1行为 N;
第2行为 N 个正整数,其间用空格间隔。

Output

增序输出的奇数序列,数据之间以逗号间隔。数据保证至少有一个奇数。


Sample Input                             Sample Output
10                                       1,3,5,7,9
1 3 2 6 5 4 9 8 7 10

Ways of Solving a Problem

首先我们先审题, 题目中有个关键词分别为:“奇数”  “单增” “升序”;

我猜大家应该都知道何为“奇数”;

那何为 “单增”,何为 “升序”呢?

“单增”的意思:如果说在某个区间内函数与自变量呈一定的变化趋势,就说这个函数具有单调性.说得通俗一点,若在这一区间内函数随着自变量的增大而增大,则函数在这一区内就叫做关于自变量的单调递增函数,简称单增;

“升序”的意思:按从小到大的顺序排。

我们先定义一个升序队列(优先队列)

优先队列详见:c++优先队列(priority_queue)用法详解_c++优先级队列_吕白_的博客-CSDN博客既然是队列那么先要包含头文件#include <queue>优先队列具有队列的所有特性,包括基本操作,只是在这基础上添加了内部的一个排序,它本质是一个堆实现的 定义:priority_queue<Type, Container, Functional> Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用https://blog.csdn.net/weixin_36888577/article/details/79937886?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522168456936716800226564714%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=168456936716800226564714&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-79937886-null-null.142^v87^insert_down28,239^v2^insert_chatgpt&utm_term=%E4%BC%98%E5%85%88%E9%98%9F%E5%88%97&spm=1018.2226.3001.4187

 代码如下:

priority_queue <int,vector<int>,greater<int> > q;

接着,我们再定义一个判断一个数是否为奇数的函数 check(bool类型)

代码如下:

bool check(int n)
{
	if(n % 2 != 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}

然后,我们将已经排好序的数导入一个数组 odd

代码如下:

    for(int i = 0; i < y; i++)
	{
		if(!q.empty())
		{
			odd[i] = q.top();
			q.pop();
		}
	}

注:

y 为队列 q 的长度。

最后这题之难处在于输出,因为数据之间以逗号间隔,所以最后最后一个数要单独输出;

代码如下:

    for(int i = 0; i < y - 1; i++)
	{
		cout << odd[i] << ",";
	}
	cout << odd[y - 1];

Above All, 来看看整体的代码

#include<bits/stdc++.h>
using namespace std;
priority_queue <int,vector<int>,greater<int> > q;
bool check(int n)
{
	if(n % 2 != 0)
	{
		return true;
	}
	else
	{
		return false;
	}
}
int main()
{
	int n;
	cin >> n;
	int x;
	int odd[n];
	for (int i = 0; i < n; i++)
	{
		cin >> x;
		if(check(x))
		{
			q.push(x);
		}
		else
		{
			continue;
		}
	}
	int y;
	y = q.size();
	for(int i = 0; i < y; i++)
	{
		if(!q.empty())
		{
			odd[i] = q.top();
			q.pop();
		}
	}
	for(int i = 0; i < y - 1; i++)
	{
		cout << odd[i] << ",";
	}
	cout << odd[y - 1];
	return 0;
}

感谢大家的支持!!!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值