基础实验8-1.1 单身狗 (25分)

 

  解题思路:1、标记是否是单身,如果单身,则直接加入输出数组,如果不单身,则寻找其伙伴是否出现在派对中,如果没出现,则加入输出数组

                    2、对输出数组升序输出

#include <stdio.h>
#include <string.h>
#define MAX 100000
int a[MAX];
void Init(int a[]) {//初始化标记数组
    int i;
    for(i=0; i<MAX; i++) {
        a[i]=-1;
    }
}
int cmp(const void *a,const void *b) {
    return (*(int *)a-*(int *)b);
}
int IsSingle(int x) {//判断是否单身
    if(a[x]==-1)
        return 1;
    return 0;
}
int FindPartner(int x,int arr[],int m) {//查找伙伴是否参加派对里
    int i;
    for(i=0; i<m; i++) {
        if(a[x]==arr[i]) {
            return 1;
        }
    }
    return 0;
}
int Partition(int a[],int low,int high) {
    int pivot=a[low];
    while(low<high) {
        while(low<high) {
            if(a[high]<pivot) {
                a[low]=a[high];
                break;
            }
            high--;
        }
        while(low<high) {
            if(a[low]>pivot) {
                a[high]=a[low];
                break;
            }
            low++;
        }
    }
    a[low]=pivot;
    return low;
}
void Sort(int a[],int low,int high) {
    if(low<high) {
        int t=Partition(a,low,high);
        Sort(a,low,t-1);
        Sort(a,t+1,high);
    }

}
int main() {
    int n;
    scanf("%d",&n);
    int i,x,y;
    for(i=0; i<n; i++) {
        scanf("%d %d",&x,&y);
        a[x]=y;
        a[y]=x;
    }
    int m;
    scanf("%d",&m);
    int arr[m],s[m];
    memset(s,0,sizeof(s));
    memset(arr,0,sizeof(arr));
    for(i=0; i<m; i++) {
        scanf("%d",&arr[i]);
    }
    int k=0;
    for(i=0; i<m; i++) {
        if(IsSingle(arr[i])) {
            s[k++]=arr[i];
        } else {
            if(!FindPartner(arr[i],arr,m))
                s[k++]=arr[i];
        }
    }
    Sort(s,0,k-1);
    for(i=0; i<k; i++) {
        if(i)
        printf(" ");
        printf("%05d",s[i]);
    }
}

 

                 

posted @ 2020-03-11 16:39  跃鱼  阅读(250)  评论(0编辑  收藏  举报