| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 8191 人关注过本帖
标题:求集合A与集合B的交集
只看楼主 加入收藏
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:9 
求集合A与集合B的交集
图片附件: 游客没有浏览图片的权限,请 登录注册
求解此题的代码
2016-08-22 16:40
小心飞刀hbw
Rank: 2
等 级:论坛游民
帖 子:47
专家分:24
注 册:2016-3-21
收藏
得分:0 
看看我的,在上面,怎么改。。。。。
2016-08-22 16:56
皮卡皮卡
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2016-8-22
收藏
得分:0 
acm平台  ,同问
2016-08-22 18:20
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
代码给你,,,那你还会编程吗?

这道题不难。每次读入一轮数据以后,先分别把AB集合按照非递减顺序排序。然后分别从AB数组的开头开始比较,如果相等:就是找到了一个交集的元素,输出他;如果不相等:小的那个集合元素位置右移,继续判断。直到某个集合被全部遍历就可以结束本轮的判定。
重新读下一轮数据并重复前面的步骤。

如果是编程新手,连读一轮数据应该怎么做都不知道的话,可以参考我在另一个帖子“https://bbs.bccn.net/thread-468090-1-1.html”的回答。里面把程序架构都给了。。。



φ(゜▽゜*)♪
2016-08-22 18:28
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:20 
回复 楼主 七夜天泪
#include<stdio.h>
   int main() {
       int  A,B,i,j,n,e=0;
       int t,u;
       int a[100],b[100],m;
       scanf("%d",&n);
      
       while(e<n)
       {   //初始化输入数组
           int c[100]={0};
           m=0;
              if(scanf("%d",&A)==1) {
                  
           for(i=0; i<A; i++)
           {
           scanf("%d",&a[i]);
           
           }
               
       }
         if(scanf("%d",&B)==1) {
           for(j=0; j<B; j++)
           {
               
               scanf("%d",&b[j]);
            
           }
               
       }
         //找交集
        for(i=0; i<A; i++) {
           for(j=0; j<B; j++)
           
               if(a[i]==b[j]) {
                  
                           c[m]=a[i];
                          m++;        
                  
               }
       }
       if(m==1)printf("%d",c[0]);
       else if(m>1)
       {    //冒泡排序
           for(i=0; i<m-1; i++)
           for(j=0; j<m-1-i; j++)
               if (c[j]>c[j+1] ) {
                   t=c[j];
                   c[j]=c[j+1];
                   c[j+1]=t;
               }
       //输出
       for(i=0; i<m; i++)
           printf("%d ",c[i]);
       }
       printf("\n");
       e++;   //计次
   
       }
      
  
       return 0;
   }

[此贴子已经被作者于2016-8-22 21:01编辑过]

2016-08-22 19:21
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 楼主 七夜天泪
不好意思,发了两贴
2016-08-22 19:22
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
收藏
得分:0 
回复 4楼 书生牛犊
我知道怎么写 就是写完了错误改过来了
#include<stdio.h>
#include<string.h>
int main() {
    int n,i,a,b,j,k,l;
    int A[100]= {0};
    int B[100]= {0};
    int C[100]= {0};
    scanf("%d",&n);
    for(i=0; i<n; i++)    {
        scanf("%d",&a);
        for(j=0; j<a; j++)
            scanf("%d",&A[j]);
        scanf("%d",&b);
        for(k=0; k<b; k++)
            scanf("%d",&B[k]);
        for(j=0; j<a; j++) {
            for(k=0; k<b; k++) {
                if(A[j]==B[k]) {
                    C[l++]=A[j];
                    //    printf("%d\n",C[l++]);
                    break ;
                }
            }
            printf("%d ",C[l++]);
        }    //printf("\n");

    }
    //  for(l=0; l<j; l++)
    //

}
我写的这部分是找交集的,排序还没写呢
2016-08-22 20:17
linlulu001
Rank: 13Rank: 13Rank: 13Rank: 13
等 级:贵宾
威 望:20
帖 子:944
专家分:4047
注 册:2016-4-13
收藏
得分:0 

#include<stdio.h>                                      
#include<malloc.h>                                    
                                                      
int main() {                                          
    int i,j,n,e,m=0;                                   
    int k=0,t;                                         
    int a1,b1;                                         
    int **a,**b,**c;                                   
    scanf("%d",&n);                                    
                                                      
    //开辟空间                                            
    a=(int**)malloc(sizeof(int*)*n);                     
    b=(int**)malloc(sizeof(int*)*n);                     
    c=(int**)malloc(sizeof(int*)*n);                     
    for(i=0;i<n;i++)                                      
    {                                                     
        a[i]=(int*)malloc(sizeof(int)*100);                  
         b[i]=(int*)malloc(sizeof(int)*100);                 
        c[i]=(int*)malloc(sizeof(int)*100);                  
    }                                                     
                                                         
    //给c[i][0]赋值,计算有多少交集                       
    for(i=0;i<n;i++)                                   
        c[i][0]=0;                                       
                                                         
       //输入集合                                         
    while(m!=n)                                       
    {                                                  
        if(scanf("%d",&a[m][0])!=EOF) {                  
            for(i=1; i<=a[m][0]; i++)                           
                scanf("%d",&a[m][i]);                     
        }                                                
        if(scanf("%d",&b[m][0])!=EOF) {                  
            for(j=1; j<=b[m][0]; j++)                     
                scanf("%d",&b[m][j]);                     
        }                                                
        m++;                                             
    }                                                  
                                                      
    //将交集赋值给数组c                                
    for(i=0; i<n; i++)                                 
    {                                                     
        k=1;                                                
         for(j=1; j<=a[i][0]; j++)                           
            for(m=1;m<=b[i][0];m++)                       
                if(a[i][j]==b[i][m])                     
                {                                                  
                    c[i][k]=a[i][j];                     
                    c[i][0]++;                           
                    k++;                                 
                }                                         
   }                                                   
                                                      
   //排序                                             
    for(i=0;i<n;i++)                                   
        for(j=1;j<=c[i][0];j++)                              
            for(m=1;m<=c[i][0];m++)                             
            if(c[i][j]<c[i][m])                                 
            {                                                   
                t=c[i][j];                                         
                c[i][j]=c[i][m];                                   
                c[i][m]=t;                                         
            }                                                   
                                                               
                                                            
       //输出                                             
    for(i=0; i<n; i++)                                 
    {                                                     
        for(j=1;j<=c[i][0];j++)                              
            printf("%d\t",c[i][j]);                             
        printf("\n");                                       
    }                                                     
                                                         
    //释放空间                                            
    free(a);                                             
    free(b);                                             
    free(c);                                             
    return 0;                                          
}               
2016-08-22 20:44
七夜天泪
Rank: 2
等 级:论坛游民
帖 子:23
专家分:16
注 册:2016-8-16
收藏
得分:0 
回复 2楼 小心飞刀hbw
那里?、
2016-08-22 21:34
书生牛犊
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:星夜征程
等 级:贵宾
威 望:10
帖 子:1101
专家分:5265
注 册:2015-10-27
收藏
得分:0 
以下是引用七夜天泪在2016-8-22 20:17:00的发言:

我知道怎么写 就是写完了错误改过来了
#include
#include
int main() {
    int n,i,a,b,j,k,l;
    int A[100]= {0};
    int B[100]= {0};
    int C[100]= {0};
    scanf("%d",&n);
    for(i=0; i
你把交集保存到C数组里面是不合适的,因为你还要知道哪几个元素是哪一组AB的交集,输出每一组交集都要带上回车换行。请注意看题目里的输出示例。他是每一组AB集合输出一行交集。

这类的题目不一定非要把所有数据读完才能做输出。你可以每读一轮数据就计算一次交集,直接输出。然后读下一轮、、、
虽然我们在本地测试的时候会看到输出夹在输入里面。但ACM平台不介意。他们会把所有的输出单独摆在一块的!你不需要担心。


[此贴子已经被作者于2016-8-23 09:03编辑过]


φ(゜▽゜*)♪
2016-08-22 23:05
快速回复:求集合A与集合B的交集
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.031761 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved