| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 6838 人关注过本帖
标题:并集怎么写
只看楼主 加入收藏
yang999
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-26
结帖率:75%
收藏
已结贴  问题点数:5 回复次数:15 
并集怎么写
程序代码:
#include<stdio.h>
int main()
{
    int a[100],b[100],c[100];
    int i,j;
    int m=0,n=0;
    int k=0,x=0;
    printf("请输入数组A:\n");
    for(i=0;i<=100;i++)
    {
        scanf("%d",&a[i]);
        if(a[i]<0)
            break;
        m++;
    }        
    printf("请输入数组B:\n");
    for(i=0;i<=100;i++)
    {
        scanf("%d",&b[i]);
        if(b[i]<0)
            break;
        n++;
    }
    printf("A,B交集:");
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            if(a[i]==b[j])
            {    
                printf("%d ",a[i]);
            }
        }
    }
    printf("A,B并集: ");
    for(i=0;i<m;i++)
    {
        c[i]=a[i];
    }
}
2016-09-22 11:43
demon90s
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:121
注 册:2016-1-3
收藏
得分:1 
写一个函数,检测一个数是否在数组里已经存在。
2016-09-22 11:48
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:1 
以下是引用yang999在2016-9-22 11:43:33的发言:

A数组 1 2 2 3
B数组 4 2 2 6
结果竟然是 『A,B交集:2 2 2 2』
2016-09-22 12:38
yang999
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2016-8-26
收藏
得分:0 
回复 3楼 rjsp
一个集合中有两个相等元素吗
2016-09-22 12:42
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:1 
回复 3楼 rjsp
这个问题也困扰我很久,处理起来有点麻烦。不知道您有没有什么高见?
2016-09-22 12:52
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用ehszt在2016-9-22 12:52:36的发言:

这个问题也困扰我很久,处理起来有点麻烦。不知道您有没有什么高见?

按照C++的做法
A数组排序( std::sort )
B数组排序( std::sort )
两个数组同时遍历( st::set_union )

还是写代码吧
程序代码:
#include <stdio.h>

int main( void )
{
    int a[9] = { 1, 1, 1, 5, 5, 5, 6, 7, 8 };
    int b[4] = { 2, 5, 5, 9 };

    // a,b两个数组要保证有序,可以用qsort先排序一下
    // 假设这里已经排好了

    // 求并集
    for( size_t i=0, j=0; i!=9 && j!=4; )
    {
        if( a[i] < b[j] )
            ++i;
        else if( a[i] > b[j] )
            ++j;
        else
        {
            printf( " %d", a[i] );
            ++i;
            ++j;
        }
    }
}


2016-09-22 13:15
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 6楼 rjsp
也会输出两个5,除非满足集合的定义(即:集合中不能有重复元素)

[此贴子已经被作者于2016-9-22 13:20编辑过]

2016-09-22 13:19
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9031
专家分:54061
注 册:2011-1-18
收藏
得分:0 
以下是引用ehszt在2016-9-22 13:19:15的发言:

也会输出两个5,除非满足集合的定义(即:集合中不能有重复元素)
输出两个5是正确的呀,因为这里确实有两个5是交集成员。
如果不想要重复元素,在C++中可以用 st::unique

改一下代码,增加部分用红色字体表示

#include <stdio.h>

int main( void )
{
    int a[9] = { 1, 1, 1, 5, 5, 5, 6, 7, 8 };
    int b[4] = { 2, 5, 5, 9 };

    // a,b两个数组要保证有序,可以用qsort先排序一下
    // 假设这里已经排好了

    // 求并集
    int temp = 0;
    for( size_t i=0, j=0; i!=9 && j!=4; )
    {
        if( a[i] < b[j] )
            ++i;
        else if( a[i] > b[j] )
            ++j;
        else
        {
            ++i;
            ++j;

            if( a[i] != temp )
            {
                temp = a[i];

                printf( " %d", a[i] );
            }
        }
    }
}
2016-09-22 13:25
grmmylbs
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:54
帖 子:1409
专家分:5845
注 册:2016-2-14
收藏
得分:1 
先排序,然后把B集合中的元素插入到a中
2016-09-22 13:25
ehszt
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:40
帖 子:1745
专家分:3216
注 册:2015-12-2
收藏
得分:0 
回复 8楼 rjsp
哦,明白您的意思了,但1,2,2,4有相同元素不能称之为集合吧?也许和数学书上定义的不一样!
2016-09-22 13:35
快速回复:并集怎么写
数据加载中...
 
   



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

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