hdoj 2034 人见人爱A-B

题目:人见人爱A-B

这题的要求是,输入两个集合A、B,然后输出两个集合A-B。
题目的要求非常简单,但是要注意的一点就是要先给集合A进行排序,因为题目要求从小到大输出答案。
第二个要注意的是输出的格式,题目要求输出的每个元素后面要跟一个空格。


我的思路就是要让B集合中的每个数跟A集合进行对比。定义两个整形变量flag=0 和 num=0。flag是用来判断B中是否有元素与A中的元素相同。而num是记录一共有多少个元素相同。

#include 
int main(){
    int a[100],b[100];
    int n,m;
    int i,j;
    int flag,num;
    int t;
    while(~scanf("%d%d",&n,&m)){
        if(n==0&&m==0) break;
        num=0;
        for(i=1;i<=n;i++){
            scanf("%d",&a[i]);
        }
        for(j=1;j<=m;j++){
            scanf("%d",&b[j]);
        }
        for(i=1;i<=n;i++){      //对数组a进行排序
            for(j=1;j<=n-1;j++){
                if(a[j]>a[j+1]){
                    t=a[j];
                    a[j]=a[j+1];
                    a[j+1]=t;
                } 
            }
        }
        for(i=1;i<=n;i++){
            flag=0;  //每次循环开始的时候,flag都等于0
            for(j=1;j<=m;j++){
                if(a[i]==b[j]){
                    flag++; //当数组b中有一个元素与数组a中的元素一样的时候,flag自增且结束循环
                    break;
                }
            }
            if(flag!=0) num++;   //有元素相同的时候,用num记录相同元素的个数
            if(flag==0) {
                printf("%d ",a[i]);//没有相同元素的时候,直接输出这个元素,且元素后面有空格
            }   
        }
        if(num==n) printf("NULL");//如果记录相同元素的个数等于数组a的个数的时候,输出NULL
        printf("\n");
    }
} 

你可能感兴趣的:(hdoj 2034 人见人爱A-B)