博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据排序 第三讲( 各种排序方法 结合noi题库1.10)
阅读量:5883 次
发布时间:2019-06-19

本文共 4544 字,大约阅读时间需要 15 分钟。

说了那么多种排序方法了,下面就来先做几个题吧

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
来源
1873
法一#include
#include
#include
#include
#include
using namespace std;int a[11];int main(){ for(int i=1;i<=10;i++) scanf("%d",&a[i]); sort(a+1,a+11); for(int i=10;i>=1;i--) if(a[i]%2!=0) cout<
<<" "; for(int i=1;i<=10;i++) if(a[i]%2==0) cout<
<<" "; return 0;}
法二#include
#include
#include
#include
#include
using namespace std;int l,r;int a[11],b[11],c[11];//b数组用来存偶数,c数组用来存奇数 int main(){ for(int i=1;i<=10;i++) { scanf("%d",&a[i]); if(a[i]%2==0) { l++; b[l]=a[i]; } else { r++; c[r]=a[i]; } } sort(b+1,b+l+1); sort(c+1,c+r+1); for(int i=r;i>0;i--) cout<
<<" "; for(int i=1;i<=l;i++) cout<
<<" "; return 0; }

07:合影效果

总时间限制: 
1000ms
内存限制: 
65536kB
描述

小云和朋友们去爬香山,为美丽的景色所陶醉,想合影留念。如果他们站成一排,男生全部在左(从拍照者的角度),并按照从矮到高的顺序从左到右排,女生全部在右,并按照从高到矮的顺序从左到右排,请问他们合影的效果是什么样的(所有人的身高都不同)?

输入
第一行是人数n(2 <= n <= 40,且至少有1个男生和1个女生)。
后面紧跟n行,每行输入一个人的性别(男male或女female)和身高(浮点数,单位米),两个数据之间以空格分隔。
输出
n个浮点数,模拟站好队后,拍照者眼中从左到右每个人的身高。每个浮点数需保留到小数点后2位,相邻两个数之间用单个空格隔开。
样例输入
6male 1.72male 1.78female 1.61male 1.65female 1.70female 1.56
样例输出
1.65 1.72 1.78 1.70 1.61 1.56
来源
医学部 2010 期末试题 李雁章
#include
#include
#include
#include
#include
using namespace std;int n,l,r;float a[41],b[41],c[41];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { string k; cin>>k>>a[i]; if(k=="male") { l++; b[l]=a[i]; } if(k=="female") { r++; c[r]=a[i]; } } sort(b+1,b+l+1); sort(c+1,c+r+1); for(int i=1;i<=l;i++) printf("%.2f ",b[i]); for(int i=r;i>0;i--) printf("%.2f ",c[i]); return 0; }

08:病人排队

总时间限制: 
1000ms
内存限制: 
65536kB
描述

病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序: 

1. 老年人(年龄 >= 60岁)比非老年人优先看病。 
2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。 
3. 非老年人按登记的先后顺序看病。

输入
第1行,输入一个小于100的正整数,表示病人的个数;
后面按照病人登记的先后顺序,每行输入一个病人的信息,包括:一个长度小于10的字符串表示病人的ID(每个病人的ID各不相同且只含数字和字母),一个整数表示病人的年龄,中间用单个空格隔开。
输出
按排好的看病顺序输出病人的ID,每行一个。
样例输入
5021075 40004003 15010158 67021033 75102012 30
样例输出
021033010158021075004003102012
来源
题解#include
using namespace std;struct man { int i; string e; int s;};int n;man a[101];int main() { int i,j; cin>>n; for(i=1; i<=n; i++) { a[i].i=i; cin>>a[i].e>>a[i].s; } for(i=1; i<=n-1; i++) { for(j=i+1; j<=n; j++) if(a[j].s>=60&&a[i].s<60) swap(a[i],a[j]); else if(a[j].s>=60&&a[i].s>=60&&a[j].s>a[i].s) swap(a[i],a[j]); else if(a[j].s>=60&&a[i].s>=60&&a[j].s==a[i].s&&a[j].i

 

09:明明的随机数

总时间限制: 
1000ms
内存限制: 
65536kB
描述

明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤100),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作。

输入
有2行,第1行为1个正整数,表示所生成的随机数的个数:N;
第2行有N个用空格隔开的正整数,为所产生的随机数。
输出
也是2行,第1行为1个正整数M,表示不相同的随机数的个数。第2行为M个用空格隔开的正整数,为从小到大排好序的不相同的随机数。
样例输入
1020 40 32 67 40 20 89 300 400 15
样例输出
815 20 32 40 67 89 300 400
来源
NOIP2006复赛 普及组 第一题
哦,这道题好像是纯桶排哦,有没有感觉到这些题low爆了
#include
#include
#include
#include
#include
using namespace std;int n,l;int a[1001];int main(){ scanf("%d",&n); for(int i=1;i<=n;i++) { int k; scanf("%d",&k); if(a[k]==0) { a[k]=1; l++; } } cout<
<
0) cout<
<<" "; return 0;}

 

转载于:https://www.cnblogs.com/z360/p/6417208.html

你可能感兴趣的文章
发展大数据不能抛弃“小数据”
查看>>
中了WannaCry病毒的电脑几乎都是Win 7
查看>>
学生机房虚拟化(九)系统操作设计思路
查看>>
nginx报错pread() returned only 0 bytes instead of 4091的分析
查看>>
HTML 字符实体
查看>>
质数因子
查看>>
Spring源码浅析之事务(四)
查看>>
[转载] Live Writer 配置写 CSDN、BlogBus、cnBlogs、163、sina 博客
查看>>
SQL:连表查询
查看>>
MySQL日期函数、时间函数总结(MySQL 5.X)
查看>>
c语言用尾插法新建链表和输出建好的链表
查看>>
Java基础学习总结(1)——equals方法
查看>>
高性能 Oracle JDBC 编程
查看>>
java 中ResultSet可以获取的数据类型及返回值类型列表
查看>>
ubuntu 13 安装SH程序
查看>>
支付宝升级延时到账功能
查看>>
ghost后只剩下一个盘的数据寻回方法
查看>>
输入输出练习
查看>>
Git commit message和工作流规范
查看>>
java面试。答案源于网上
查看>>