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分

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

  1. 老年人(年龄 >= 60岁)比非老年人优先看病。

  2. 老年人按年龄从大到小的顺序看病,年龄相同的按登记的先后顺序排序。

(2)条没写好

  1. 非老年人按登记的先后顺序看病。
#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 简单排序的主要内容,如果未能解决你的问题,请参考以下文章

openjudge上关于sort排序的题。

整理小朋友在noi.openjudge上的作业

Datatables 1.10 仅通过单击排序图标

如何看mysql版本

数据排序 第二讲( 各种排序方法 结合noi题库1.10)

openjudge整数奇偶数排序问题,一直是wrong answer,不知问题在哪里