Openjudge 1.10 简单排序
Posted liuziwen0224
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Openjudge 1.10 简单排序相关的知识,希望对你有一定的参考价值。
1.10.6 奇偶排列
我的读入一行方式很奇怪,应该只能用于这种给定长度的数组了(急需补习...)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int c[15];
bool cmp(int x,int y){
if(x%2==0&&y%2==0) return x<y;
if(x%2!=0&&y%2!=0) return x>y;
if(x%2!=0&&y%2==0) return 1;
if(x%2==0&&y%2!=0) return 0;
}
int main( ){
cin>>c[1]>>c[2]>>c[3]>>c[4]>>c[5]>>c[6]>>c[7]>>c[8];
cin>>c[9]>>c[10];
sort(c+1,c+11,cmp);
for(int i=1;i<=10;i++){
printf("%d ",c[i]);
}
return 0;
}
1.10.7 合照效果
cmp作用好大
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
struct m{
char s[7];
int num;
double tall;
bool wet;//1 male 0 female
}pep[41];
struct ma{
double tal;
bool we;
}man[41],woman[41];
bool cmp(ma x,ma y){
if(x.we==1&&y.we==1) return x.tal<y.tal;
if(x.we==0&&y.we==0) return x.tal>y.tal;
}
int main( ){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",pep[i].s);
scanf("%lf",&pep[i].tall);
pep[i].num=i;
if(pep[i].s[0]=='m') pep[i].wet=1;
else pep[i].wet=0;
}
int pp=1,qq=1;
for(int i=1;i<=n;i++){
if(pep[i].wet==1) {
man[pp].tal=pep[i].tall;
man[pp].we=1;
//printf("%.2lf %d %d
",man[pp].tal,pp,man[pp].we);
pp++;
}
else if(pep[i].wet==0) {
woman[qq].tal=pep[i].tall;
woman[qq].we=0;
//printf("%.2lf %d %d
",woman[qq].tal,qq,woman[qq].we);
qq++;
}
}
pp--;qq--;
//printf("pp=%d qq=%d
",pp,qq);
sort(man+1,man+pp+1,cmp);
sort(woman+1,woman+qq+1,cmp);
//printf("tot=%d sum=%d r=%d
",tot,sum,r);
for(int i=1;i<=pp;i++){
printf("%.2lf ",man[i].tal);
}
for(int i=1;i<=qq;i++){
printf("%.2lf ",woman[i].tal);
}
return 0;
}
1.10.8 病人排队
cmp写的不好,一开始4分
病人登记看病,编写一个程序,将登记的病人按照以下原则排出看病的先后顺序:
老年人(年龄 >= 60岁)比非老年人优先看病。
老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。
第(2)条没写好
- 非老年人按登记的先后顺序看病。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
struct c{
char s[15];
int age;
int num;
}pep[105];
bool cmp(c x,c y){
if(x.age<60&&y.age<60) return x.num<y.num;
else if(x.age>=60&&y.age>=60&&x.age==y.age) return x.num<y.num;
return x.age>y.age;
}
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%s",pep[i].s);
scanf("%d",&pep[i].age);
pep[i].num=i;
}
sort(pep+1,pep+n+1,cmp);
for(int i=1;i<=n;i++){
printf("%s
",pep[i].s);
}
return 0;
}
1.10.9 随机数
WA 9分 我也不知道为什么
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
int a[105];
int main(){
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=1;i<=n;i++){
for(int j=2;j<=n;j++){
if(a[j]<=a[j-1]) swap(a[j],a[j-1]);
if(a[j]==a[j-1]){
a[j]=0;
for(int l=j;l<n;l++){
a[l]=a[l+1];
a[l+1]=0;
}
n--;
}
}
}
printf("%d
",n);
for(int i=1;i<=n;i++){
printf("%d ",a[i]);
}
return 0;
}
以上是关于Openjudge 1.10 简单排序的主要内容,如果未能解决你的问题,请参考以下文章