| 网站首页 | 业界新闻 | 群组 | 交易 | 人才 | 下载频道 | 博客 | 代码贴 | 编程论坛
共有 1472 人关注过本帖
标题:咋求两个数组的并集
只看楼主 加入收藏
wanmeiwuque
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-19
结帖率:0
  已结贴   问题点数:10  回复次数:8   
咋求两个数组的并集
#include <stdio.h>
int main(void)
{
    int a[500],b[500],c[1000],d[500],y[1000],k = 0;
    int i,j,n,m,t,r;
    int q=0,w=0,e=0;
    scanf("%d",&n);
    for(i = 0; i < 5; i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(j = 0; j < 5; j++)
        scanf("%d",&b[j]);
    for(i = 0;i<n;i++)
        for(j = 0; j < m; j++)
        {  if(a[i]==b[j])
           {  printf("%d ",a[i]);
              d[w++]=a[i];
               k++;
           }
        }//交集;
     for(i = 0;i<n;i++)
         c[q++]=a[i];
     r=n;
     for(j = 0; j < m; j++)
         c[r++]=b[j];//a,b数组给c
     for(i = 0;i<q+r-1;i++)
         for(j = 0; j<q+r-i-1; j++)
         {  if(c[j]>c[j+1])
            {  t=c[j];
               c[j]=c[j+1];
               c[j+1]=t;
            }
         }//数组c排序
     w=0;
     for(i = 0;i<q+r;i++)
     {  if(c[i]!=d[w])
        { y[e]=c[i];
          e++;
        }
        w++;   
     }
     for(i = 0;i<e;i++)
        printf("%d ",y[i]);
    printf("\n");
    return 0;
}
我标了交集注释之后的是求并集,这毛病在哪啊,求各位点拨
2018-01-12 09:43
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12742
专家分:49749
注 册:2012-10-18
  得分:5 
A、B 交集是A、B 共有的部分
A、B并集是A+B-AB共有

还有 哪有把注释写在后面的啊 都看不明白你的代码

DO IT YOURSELF !
2018-01-12 09:51
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
  得分:5 
交集和并集通常都是用到搜索或者排序思想嘛~
求并集嘛~
用哈希或二叉树可以提高效率~

[此贴子已经被作者于2018-1-12 10:02编辑过]


[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-12 10:01
wanmeiwuque
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-19
  得分:0 
回复 2楼 wp231957
我的代码:先把a数组,b数组都给到c数组,然后再把c数组从小到大排序;然后再把c数组和a,b数组的交集比较,把c数组里和交集不同的值赋值给y数组,最后输出y数组。
2018-01-12 10:01
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
  得分:0 
回复 4楼 wanmeiwuque
对A B数组分别进行排序,并集就是排序后找出AB不同的~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-12 10:03
wanmeiwuque
Rank: 1
等 级:新手上路
帖 子:14
专家分:0
注 册:2017-12-19
  得分:0 
回复 5楼 九转星河
如果要检测a,b不同的,那循环怎么写,如果这样写:
for(i=0;i<n;i++)
   for(j=0;j<m;j++)
   if(a[i]!=b[j])
     printf();
它会每个a[i]都单独与每个b[j]都比一遍,然后输出,要咋写才能使他只比一轮呢。
2018-01-12 11:31
九转星河
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:长长久久
等 级:贵宾
威 望:52
帖 子:5023
专家分:14003
注 册:2016-10-22
  得分:0 
回复 6楼 wanmeiwuque
先排序(用快排--快排函数qsort可以减少时间复杂度)再归并去重~

什么,一次比较?那就用哈希表吧~

[code]/*~个性签名:bug是什么意思?bug是看上去没有可能的东西实际上是有可能做到的 就是这样~2018-08-08更~*/[/code]
2018-01-12 11:40
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12742
专家分:49749
注 册:2012-10-18
  得分:0 
程序代码:

#include <stdio.h>

#define N 8
#define MAX 128

int main()
{
    int a[N]={5,6,7,8,100,101,102,103 };
    int b[N]={1,2,3,4,5,6,7,8};
    int t[MAX]={0};
    for(int i=0;i<N;i++)
    {
        t[a[i]]++;
        t[b[i]]++;
    }
    printf("并集输出:\n");
    for(int i=0;i<MAX;i++) if(t[i]!=0) printf("%6d",i);
    printf("\n交集输出:\n");
    for(int i=0;i<MAX;i++) if(t[i]>1) printf("%6d",i);
    return 0;
}

DO IT YOURSELF !
2018-01-12 13:51
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:367
帖 子:12742
专家分:49749
注 册:2012-10-18
  得分:0 
8楼代码存在bug 不妥

DO IT YOURSELF !
2018-01-12 14:21







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

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