openjudge上关于sort排序的题。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了openjudge上关于sort排序的题。相关的知识,希望对你有一定的参考价值。
先给各位奉上题目吧。。
openjudge简单排序06 整数奇偶排序
- 总时间限制:
- 1000ms
- 内存限制:
- 65536kB
- 描述
-
给定10个整数的序列,要求对其重新排序。排序要求:
1.奇数在前,偶数在后;
2.奇数按从大到小排序;
3.偶数按从小到大排序。
- 输入
- 输入一行,包含10个整数,彼此以一个空格分开,每个整数的范围是大于等于0,小于等于100。
- 输出
- 按照要求排序后输出一行,包含排序后的10个整数,数与数之间以一个空格分开。
- 样例输入
-
4 7 3 13 11 12 0 47 34 98
- 样例输出
-
47 13 11 7 3 0 4 12 34 98
不知道各位看完题目什么感觉。。反正我作为一个刚刚学会用sort的小菜鸟来说,好像很难的样子。。(用快排、桶排、冒泡排的大佬勿喷。。)
重点主要在于这并不是简单的排序,首先这里要求排完序后奇数在前偶数在后并且奇数要从大到小排,偶数要从小到大排,所以这里将奇数和偶数分别存储于两
个数组中在继续计算。
第一步先定义下吧:
int ji[12],o[12],sum=1,ans=1,m;
解释一下,在这里这些书首先都是整数,ji[12]用于存储奇数,ou[12]用于存储偶数,sum和ans分别代表10个数中奇数和偶数出现的次数(即奇数和偶数的个
数)那么m则代表循环输入时的第m个数。(现在看不懂这些没关系,待会看到代码就都明白了)
首先知道要进行排序的数只有10个,这样子来说的话题目还是挺良心的,但这10个数中有奇有偶的话,那一定首先得将读入的10个数分类一波,分为奇数和偶数
两个数组来分别存储,那么代码基本如下:
for(int i=0;i<10;i++)
{
cin>>m;
if(m%2!=0)
{
ji[sum]=m;
sum++;
}
else
{
o[ans]=m;
ans++;
}
}
上面的代码可能有些地方不妥,大神勿喷。。
那么来说明一下这里的读入及分类,先开一个循环次数为10次的for循环,然后每次循环一次读入m,这是用了一个if-else选择语句来判断m的奇偶性,即如果
m%2!=0即可说明m除以二后的余数不等于0,也就是说m是一个奇数,所以将m存入ji[sum],此时sum=1,但当这个条件每执行一次后,sum的值就会+1;但如
果else,也就是说m%2==0,那么就将m的值存入数组o[ans],同理,每执行一次else条件,ans的值+1;这样就将读入的10个数分好类了;
分类过后,那么就该开始排序了,此时ji数组存储的是奇数,ou数组存储的是偶数,先将分类代码为各位大佬奉上:
sort(ji+0,ji+sum);
sort(o+0,o+ans);
看完是不是有点懵逼?是呀,题目要求的奇数是要从大到小排序,而sort()的默认排序方式为从小到大排序,但现在咱们先按照从小到大排序,并不着急,一
会看完了输出再说吧。。当然如果你想直接用sort的从大到小排序,也是可以的,格式为sort(开始值,结束值,comp),但这里需要自己写一个comp函数,
具体代码:
int comp(const int &a,const int &b)
{
return a>b;
}
写完这个函数,就可以直接用comp了。
那么这里我们先把奇偶数分别排好序了,接下来就可以直接输出了。。代码献上:
for(int i=sum-1;i>0;i--)
{
cout<<ji[i]<<" ";
}
for(int i=1;i<ans;i++)
{
cout<<o[i]<<" ";
}
看到这里有些大佬肯定已经明白了,之前奇数之所以用sort的从小到大排序,是因为其实没必要那么麻烦的去写comp函数,直接在输出环节上将之前排好序的ji数组倒
序输出不就好了吗?举个例子,例如a<b<c.那么倒序输出即为c>b>a,自己体会一下吧。。偶数那没啥说的,直接照排好序的输出即可。
最后提醒一句。。。别忘了return 0;。。。。。
现在奉上已AC的满分代码,再重复一遍:大神勿喷。。
#include<bits/stdc++.h>
using namespace std;
int ji[100],o[100],sum=1,ans=1,m;
int main()
{
for(int i=0;i<10;i++)
{
cin>>m;
if(m%2!=0)
{
ji[sum]=m;
sum++;
}
else if(m%2==0)
{
o[ans]=m;
ans++;
}
}
sort(ji+0,ji+sum);
sort(o+0,o+ans);
for(int i=sum-1;i>0;i--)
{
cout<<ji[i]<<" ";
}
for(int i=1;i<ans;i++)
{
cout<<o[i]<<" ";
}
return 0;
}
如果这篇博客对你有帮助,求点赞QAQ。。
以上是关于openjudge上关于sort排序的题。的主要内容,如果未能解决你的问题,请参考以下文章