| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2049 人关注过本帖
标题:C语言问题:输入两组数据找到其中相同的部分~
只看楼主 加入收藏
NightWithYou
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2017-3-4
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:10 
C语言问题:输入两组数据找到其中相同的部分~
找到相同的部分的意思就是  例如: 输入a ={1 2 3 4 5 6 7 8 9} b = {2 3 4 5 6 7 8 9 10}   那么输出的就应该是 c={2 3 4 5 6 7 8 9}

求详细代码~~~~~
2017-03-24 13:28
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:7 
就是求两个集合(set_intersection )的交集呗
你得告诉大家两点:
    a. 两个集合是不是已经排序好了?
    b. 若未排序,允许不允许重排改变实参的顺序?
2017-03-24 13:51
吹水佬
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:451
帖 子:10611
专家分:43210
注 册:2014-5-20
收藏
得分:7 
这些1,2,3,...数的范围?
2017-03-24 13:52
NightWithYou
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2017-3-4
收藏
得分:0 
回复 2楼 rjsp
没有被安排~自己输入
可以不排序的
2017-03-24 14:04
NightWithYou
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2017-3-4
收藏
得分:0 
回复 3楼 吹水佬
嗯 只要是整数就行~~
2017-03-24 14:05
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:0 
以下是引用NightWithYou在2017-3-24 14:04:46的发言:

没有被安排~自己输入
可以不排序的
我当然知道“可以不排序的”,我问的是“允许不允许排序”
这么讲吧,如果数据本身是无序的,且又不允许被重排,那么算法复杂多了
对于已经排序的两个集合,有只需要遍历一次的算法。

嗯 只要是整数就行~~
吹水佬问的是“数据范围”,而不是“数据类型”
我猜他的意思是,如果数据范围不大的话,那么可以用bitmap的手段快速求得结果
2017-03-24 14:35
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:0 
参考一下 C++ 的做法:
程序代码:
#include <vector>
#include <algorithm>
#include <iostream>
#include <iterator>
using namespace std;

int main( void )
{
    int a[] = { 1, 2, 3, 3, 4 };
    int b[] = {    2, 3, 3, 4, 4, 5 };

    // 如果a、b是无序的,得先排序
    // std::sort( begin(a), end(a) );
    // std::sort( begin(b), end(b) );

    std::vector<int> out;
    set_intersection( begin(a),end(a), begin(b),end(b), std::back_inserter(out) );

    std::copy( begin(out),end(out), std::ostream_iterator<int>(cout," ") );
}
输出
2 3 3 4

2017-03-24 14:39
NightWithYou
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2017-3-4
收藏
得分:0 
回复 6楼 rjsp
允许排序的  数值范围的不是很大 100 以内
2017-03-24 14:48
NightWithYou
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2017-3-4
收藏
得分:0 
回复 6楼 rjsp
主要是要求运用链表做这个~~~~~
2017-03-24 14:50
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9032
专家分:54066
注 册:2011-1-18
收藏
得分:0 
以下是引用NightWithYou在2017-3-24 14:48:51的发言:

允许排序的  数值范围的不是很大 100 以内
100以内,那用吹水佬的方法最高效

伪代码如下:
unsigned mark_of_seta[100] = { 0 };
unsigned mark_of_setb[100] = { 0 };
for( value of seta ) ++mark_of_seta[value];
for( value of setb ) ++mark_of_setb[value];

for( size_t i=0; i!=100; ++i )
{
    count = min( mark_of_seta[i], mark_of_setb[i] )
    if( count != 0 )
        输出count个i
}

主要是要求运用链表做这个~~~~~
不评价
2017-03-24 15:00
快速回复:C语言问题:输入两组数据找到其中相同的部分~
数据加载中...
 
   



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

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