OJ1349 求集合之间的关系

本文介绍了一个用于判断两个集合间关系的算法,包括子集、真子集和非子集的判断。通过排序和比较,算法能高效地确定集合间的关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#OJ1349 求集合之间的关系
[2011 SE|CS]C Progamming Test 5-5: 求集合之间关系

Time Limit:1000MS Memory
Limit:65536K

Total Submit:2980 Accepted:1224

Description

编写程序,读入N,和有N个数组成的集合;再读入M,和由M个数组成的集合。然后判断第2个集合是否:

(a)是第1个集合的子集。输出subset

(b)是第1个集合的真子集。输出realsubset

(c)既非(a)有非(b)。输出notsubset

Input

3组以下数据:

N和N个整数,M和M个整数。0<M,N<1000

Output

相应的判断结果

Sample Input

10 1 2 3 4 5 6 7 8
9 10

5 1 2 3 4 5

6 1 2 3 4 5 6

6 3 1 2 5 6 4

4 1 2 3 4

3 4 5 6

Sample Output

realsubset

subset

notsubset

Source

ZhaoCheng



#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、付费专栏及课程。

余额充值