1 条题解

  • 0
    @ 2025-2-14 20:39:28

    C :

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef struct _Link
    {
        int Id;
        int Score;
        struct _Link * Prev;
        struct _Link * Next;
    }Link,*PLink;
    
    void input(PLink * nml,int nm)
    {
        int i=0;
        for(;i<nm;++i)
        {
            PLink l =(PLink)malloc(sizeof(Link));
            if(*nml)
            {
                (*nml)->Next = l; 
                l->Prev = (*nml);
                l->Next = NULL;
                (*nml)=  (*nml)->Next ;
            }
            else
            {
                (*nml) = l;
                l->Prev=NULL;
                l->Next = NULL;
            }
            scanf("%d %d",&((*nml)->Id),&((*nml)->Score));
        }
    }
    
    PLink merge(PLink* nl,PLink* ml,int n,int m)
    {
        PLink l = n<m? *nl:*ml;
        while((*nl)->Prev)*nl=(*nl)->Prev;
        while((*ml)->Prev)*ml=(*ml)->Prev;
        if(n<m)
        {
            l->Next= *ml;
            (*ml)->Prev = l;
            return *nl;
        }
        l->Next = *nl;
        (*nl)->Prev = l;
        return *ml;
    }
    
    void sort(PLink  h)
    {
        PLink i,j;
        for(i=h;i->Next;i=i->Next)
        {
            for(j=i->Next;(j)&&(j->Prev);j=j->Prev)
            {
                if(j->Id<(j->Prev->Id))
                {
                    //change values
                    j->Id +=j->Prev->Id;
                    j->Prev->Id = j->Id-(j->Prev->Id);
                    j->Id-=j->Prev->Id;
                    j->Score +=j->Prev->Score;
                    j->Prev->Score = j->Score-(j->Prev->Score);
                    j->Score-=j->Prev->Score;
                }
            }
        }
    }
    
    int main()
    {
        int N,M,ni,mi;
        PLink NL=0,ML=0,HL=0;
        scanf("%d %d",&N,&M);
        //input
        input(&NL,N);
        input(&ML,M);
        //merge
        HL = merge(&NL,&ML,N,M);
        //sort
        sort(HL);
        //output
        while(HL)
        {
            printf("%d %d\n",HL->Id,HL->Score);
            HL = HL->Next;
        }
        return 0;
    }
    

    C++ :

    #include<bits/stdc++.h>
    using namespace std;
    struct f
    {
        int a,b;
    }a[100000];
    bool cmp(f a,f b)
    {
        return a.a<b.a;
    }
    int n,m;
    int main()
    {
        cin>>n>>m;
        for(int i=1;i<=n+m;i++)
        cin>>a[i].a>>a[i].b;
        sort(a+1,a+n+m+1,cmp);
        for(int i=1;i<=n+m;i++)
        cout<<a[i].a<<" "<<a[i].b<<"\n";
        return 0;
    }
    
    • 1

    C语言程序设计教程(第三版)课后习题11.8

    信息

    ID
    318
    时间
    1000ms
    内存
    128MiB
    难度
    10
    标签
    递交数
    4
    已通过
    1
    上传者