【杭电】[2034]人见人爱AB

这里写图片描述
这里写图片描述

也是很有意思的一题
不过当时好像也没费多少劲

#include<stdio.h>
int main() {
    int t,i,k,j,n,m,x,y;
    int A[120],B[120],R[120];
    while(scanf("%d %d",&n,&m),n!=0||m!=0) {
        for(i=0; i<n; i++)
            scanf("%d",&A[i]);
        for(i=0; i<m; i++)
            scanf("%d",&B[i]);
        j=y=0;
        for(i=0; i<n; i++) {
            x=0;
            for(k=0; k<m; k++) {
                if(A[i]==B[k])
                    x=1;
            }
            if(x==0) {
                y=1;
                R[j]=A[i];
                j++;
            }
        }
        if(y==1) {
            for(i=0; i<j; i++) {
                for(k=0; k<j; k++) {
                    if(R[i]<R[k]) {
                        t=R[i];
                        R[i]=R[k];
                        R[k]=t;
                    }
                }
            }
            for(i=0; i<j; i++)
                printf("%d ",R[i]);
            printf("\n");
        } else
            printf("NULL\n");
    }
    return 0;
}

=======20160531补充=========

简化一下思路
每次对于集合A中的元素
查找集合B中是否有这一元素
如果有则无需输出

最后检查是否输出过元素
如果没有则为NULL

注意最后要求排序后输出
所以可以另开一数组记录

#include<stdio.h>
#include<algorithm>
using namespace std;
int a[120],b[120],res[120];
int main() {
    int n,m;
    while(scanf("%d %d",&n,&m),n||m) {
        for(int i=0; i<n; i++)
            scanf("%d",&a[i]);
        for(int i=0; i<m; i++)
            scanf("%d",&b[i]);
        int cnt=0;
        for(int i=0; i<n; i++) {
            int j;
            for(j=0; j<m; j++) {
                if(b[j]==a[i]) {
                    break;
                }
            }
            if(j>=m) {
                res[cnt++]=a[i];
            }
        }
        if(cnt==0)
            printf("NULL");
        else {
            sort(res,res+cnt);
            for(int i=0; i<cnt; i++)
                printf("%d ",res[i]);
        }
        printf("\n");
    }
    return 0;
}

题目地址:【杭电】[2034]人见人爱A-B

原文地址:https://www.cnblogs.com/BoilTask/p/12570123.html