集合运算

蓝桥杯练习题

问题描述
  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
  第三行为一个整数m,表示集合B中的元素个数。
  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
  集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
  第一行按从小到大的顺序输出A、B交集中的所有元素。
  第二行按从小到大的顺序输出A、B并集中的所有元素。
  第三行按从小到大的顺序输出B在A中的余集中的所有元素。

package c算法训练;

import java.util.Arrays;
/*
 * 问题描述
  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
  第三行为一个整数m,表示集合B中的元素个数。
  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
  集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
  第一行按从小到大的顺序输出A、B交集中的所有元素。
  第二行按从小到大的顺序输出A、B并集中的所有元素。
  第三行按从小到大的顺序输出B在A中的余集中的所有元素。
 */
import java.util.Scanner;

public class 集合运算 {
	
public static void main(String[] args) {
	int k=0,c = 0,d=0;
	  Scanner in=new Scanner(System.in);
	  int a=in.nextInt();
	  int arr[]=new int[a];
	  for(int i=0;i<arr.length;i++) {
		  arr[i]=in.nextInt();
	  }
	  Arrays.sort(arr);
	  int  b=in.nextInt();
	  int arr1[]=new int [b];
	  for(int i=0;i<arr1.length;i++) {
		  arr1[i]=in.nextInt();
	  }
	  for(int i=0;i<arr.length;i++) {
		  for(int j=0;j<arr1.length;j++) {
		  if(arr[i]==arr1[i]) {
			k++;//记录重复值的数组下标
			continue;
		  } 
		  }  
		} 
	  //建立从重复值的数组;
	  int []arr2=new int[k];
	  for(int i=0;i<arr.length;i++) {
		  for(int j=0;j<arr1.length;j++) {
          if(  arr[i]==arr[j]){
        	  arr2[c]=arr[i];
              c++;//记录重复数
           continue;
		  } 	  
	  }
    }
    Arrays.sort(arr2);//排序然后输出
    for(int i=0;i<arr2.length;i++) {
    	System.out.print(arr2[i]+" ");
    }
    System.out.println();
    //将交集元素删除
    int []arr3=new int[a-c];
    for(int i=0;i<arr.length;i++) {
    	for(int j=0;j<arr2.length;j++) {
    		if(arr[i]==arr2[j]) {
    	j=arr2.length-1;
    	continue;
    		}
    	if(arr[i]!=arr2[j]&&j==arr2.length-1) {
    		arr3[d++]=arr[i];
    		if(d==a-c) {
    			d--;
    		}
    	}
    	}
    	
    }
    int[]aa=new int [a-c+b];
    for(int i=0;i<arr3.length;i++) {
    	if(arr3.length!=arr.length)
    		aa[i]=arr3[i];
    	if(aa.length==arr.length){
    		aa[i]=arr[i];
    	}
    }
    if(arr3.length!=arr.length){
     for(int j=arr3.length;j<aa.length;j++) {
    	 aa[j]=arr1[c++];
     }
    }
    Arrays.parallelSort(aa);
    for(int i=0;i<aa.length;i++) {
    	System.out.println(aa[i]+" ");
    }System.out.println();
    Arrays.sort(arr3);
    Arrays.sort(arr);
    if(arr3.length!=arr.length)
    	for(int i=0;i<arr3.length;i++) {
    		System.out.println(arr3[i]+" ");
    	}
    if(arr3.length==arr.length) {
    	for(int j=0;j<arr.length;j++) {
    		System.out.println(arr[j]+" ");
    	}
    }
}
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金石不渝

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值