【问题描述】两个集合的差集定义如下:
集合A、B的差集,由所有属于A但不属于B的元素构成。
输入两个集合A、B,每个集合中元素都是自然数。求集合A、B的差集。
【输入形式】
从标准输入接收集合中的自然数元素,以空格分隔。-1表示输入结束。
其中,每个集合都不输入重复的元素。
【输出形式】
输出差运算后集合中的元素,以空格分隔。输出元素的顺序与原有集合A输入的顺序一致。
如果A、B的差集为空集,则不输出任何数值。
【样例输入】
2 8 3 4 -1
6 1 4 9 -1
【样例输出】
2 8 3
【样例说明】从标准输入接收集合中的自然数元素,输出集合A、B的差集。
【评分标准】该题要求输出差运算后集合中的元素,结果完全正确得20分,每个测试点4分。
C++参考代码如下(大佬勿喷):
方法一:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,i=0,j=0;
int s[100],v[100];
while(1)
{
cin>>a;
if(a==-1) break;
else
{
s[i]=a; i++;
}
}
while(1)
{
cin>>b;
if(b==-1) break;
else
{
v[j]=b;j++;
}
}
for(int k=0;k<i;k++)
{
int flag=0;
for(int m=0;m<j;m++)
{
if(s[k]==v[m])
{
flag=1; break;
}
}
if(flag==0) cout<<s[k]<<" ";
}
return 0;
}
方法二:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,i=0,j=0;
int A[100],B[100];
while(1)
{
cin>>a;
if(a==-1) break;
else
{
A[i]=a; i++;
}
}
while(1)
{
cin>>b;
if(b==-1) break;
else
{
B[j]=b;j++;
}
}
for(int h=0;h<i;h++)
{
int count=0;
for(int k=0;k<j;k++)
{
if(A[h]==B[k])
{
break;
}
count++;
}
if(count==j) cout<<A[h]<<" ";
}
return 0;
}
Java参考代码示例:
方法一:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int[] a = new int[1010];
int[] b = new int[1010];
int sum1=1,sum2=1;
int n = sc.nextInt();
a[0]=n;
while(n!=-1) {
n = sc.nextInt();
a[sum1]=n;
sum1++;
}
int m = sc.nextInt();
b[0]=m;
while(m!=-1) {
m = sc.nextInt();
b[sum2]=m;
sum2++;
}
for(int i=0;i<sum1;i++) {
int flag=0;
for(int j=0;j<sum2;j++) {
if(a[i]==b[j]) {
flag=1;
break;
}
}
if(flag==0) System.out.print(a[i]+" ");
}
}
}
方法二(使用ArrayList中的contains方法):
import java.util.ArrayList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
ArrayList<Integer> num1 = new ArrayList<Integer>();
ArrayList<Integer> num2 = new ArrayList<Integer>();
int n,m;
while((n=sc.nextInt())!=-1) {
num1.add(n);
}
while((m=sc.nextInt())!=-1) {
num2.add(m);
}
for(Integer numb:num1) {
if(!num2.contains(numb)) System.out.print(numb+" ");
}
}
}