• 回答网友的一个问题


    用c++编写程序,输入两个集合的元素(分别保存到数组,注意一个集合中的元素不能重复),
    求出它们的并集。例如,有集合a={1,3,5,7,9}, b={1,2,5,4,6},并集c={1,3,5,7,9,2,4,6}。设计
    时,可以先将一个数组的所有元素存入并集中,对另一个集合的每个元素逐个进行判别:若
    不属于并集则加入其中

    我的代码:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    //检查b是否在数组a中
    inline bool f1(int *a, int size_a,int b)
    {
    	if (b < a[0] || b > a[size_a-1])
    		return 1;
    	for (int j = 0; j < size_a; ++j)
    	{
    		if (a[j] == b)
    		{
    			return 0;
    		}
    	}
    	return 1;
    }
    
    void merge_array(int *a, int size_a,int *b, int size_b,int *c,int &merge_size)
    {
      bool	flag = 1;//数组a大则为1
      int real_size = 0;
      if (size_a > size_b)
          sort(a,a+size_a);
      else
      {
          sort(b,b+size_b);
    	  flag = 0;
      }
      if (flag)
      {
    	  real_size = size_a;
    	  for (int i = 0; i < size_a; ++i)
    	  {
    		  c[i] = a[i];
    	  }
          for (int i = 0; i < size_b;++i)
          {
    		  if (f1(a,size_a,b[i]))
    		  {
    			  c[real_size++] = b[i];
    		  }
          }
      } 
      else
      {
    	  real_size = size_b;
    	  for (int i = 0; i < size_b; ++i)
    	  {
    		  c[i] = b[i];
    	  }
    	  for (int i = 0; i < size_a;++i)
    	  {
    		  if (f1(b,size_b,a[i]))
    		  {
    			  c[real_size++] = a[i];
    		  }
    	  }
      }
      merge_size = real_size;
    }
    
    int main()
    {
    	int a[] = {1,3,5,7,9}, b[] = {1,2,5,4,6};
    	int size_a = sizeof(a)/sizeof(*a), size_b = sizeof(b)/sizeof(*b);
    	int merge_size = size_a + size_b;
        int *c = new int[merge_size];
        merge_array(a,size_a,b,size_b,c,merge_size);
    	for (int i = 0 ; i < merge_size; ++i)
    	{
    		cout << c[i]<< " ";
    	}
    }
    
    貌似也是不怎么给力啊

  • 相关阅读:
    第十一周学习总结
    个人冲刺——(六)
    第二阶段冲刺—第二天
    软件工程第十四周总结
    第二阶段冲刺—第一天
    大道至简阅读笔记02
    输入法用户体验评价
    软件工程第十三周总结
    人机交互-水王
    大道至简阅读笔记01
  • 原文地址:https://www.cnblogs.com/xiangshancuizhu/p/1971708.html
Copyright © 2020-2023  润新知