说了那么多种排序方法了,下面就来先做几个题吧
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;}