判断集合关系:子集与真子集

编写程序,读入N,和有N个数组成的集合;再读入M,和由M个数组成的集合。然后判断第2个集合是否:
a)是第1个集合的子集。输出subset
b)是第1个集合的真子集。输出realsubset
c)既非(a)有非(b)。输出notsubset 

问题描述

给定两个集合 A 和 B,我们需要判断 B 是否满足以下条件之一:

  1. B 是 A 的子集(subset)。
  2. B 是 A 的真子集(realsubset)。
  3. B 既不是 A 的子集,也不是 A 的真子集(notsubset)。

输入格式

  1. N - 第一个集合 A 的元素个数。
  2. A - 包含 N 个整数的集合。
  3. M - 第二个集合 B 的元素个数。
  4. 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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值