码迷,mamicode.com
首页 > 编程语言 > 详细

openjudge上关于sort排序的题。

时间:2017-10-16 19:45:29      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:cin   class   clu   i++   pac   代码   快排   ace   com   

先给各位奉上题目吧。。

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排序的题。

标签:cin   class   clu   i++   pac   代码   快排   ace   com   

原文地址:http://www.cnblogs.com/liujiaming/p/7677999.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!