编写程序,读入N,和有N个数组成的集合;再读入M,和由M个数组成的集合。然后判断第2个集合是否:
(a)是第1个集合的子集。输出subset
(b)是第1个集合的真子集。输出realsubset
(c)既非(a)有非(b)。输出notsubset
问题描述
给定两个集合 A 和 B,我们需要判断 B 是否满足以下条件之一:
- B 是 A 的子集(subset)。
- B 是 A 的真子集(realsubset)。
- B 既不是 A 的子集,也不是 A 的真子集(notsubset)。
输入格式
- N - 第一个集合 A 的元素个数。
- A - 包含 N 个整数的集合。
- M - 第二个集合 B 的元素个数。
- B - 包含 M 个整数的集合。
输出格式
- 如果 B 是 A 的子集,输出
subset
。 - 如果 B 是 A 的真子集,输出
realsubset
。 - 如果 B 既不是 A 的子集,也不是 A 的真子集,输出
notsubset
。
#include <stdio.h>
void f(int a[],int b){
int i;
for(i=0;i<b;i++)
scanf("%d",&a[i]);
}
void p(int a[],int b){
int i,r,t;
for(i=0;i<b-1;i++)
for(r=0;r<b-1-i;r++)
if(a[r]>a[r+1])
{t=a[r+1];a[r+1]=a[r];a[r]=t;}
}
int c(int N[],int M[],int n,int m)
{
int s=0,r,i;
p(N,n);
p(M,m);
for(r=0,i=0;r<m&&i<n;r++,i++)
{
if(N[i]>M[r])
return 0;
if(N[i]<M[r])
{r--;s++;}
}
if(m==n&&N[n-1]==M[m-1])
return 1;
if(m<n&&N[i-1]==M[m-1])
return 2;
else
return 0;
}
int main()
{
int N[1000],M[1000],n,m,i,a[3];
for(i=0;i<3;i++)
{
scanf("%d",&n);
f(N,n);
scanf("%d",&m);
f(M,m);
a[i]=c(N,M,n,m);
}
for(i=0;i<3;i++)
{
if(a[i]==1) printf("subset\n");
if(a[i]==2) printf("realsubset\n");
if(a[i]==0||m>n) printf("notsubset\n");
}
return 0;
}