少女122号 2021-03-17 23:01 采纳率: 66.7%
浏览 35
已采纳

求大佬们帮助!!!不知道为啥就是差集出不来呀!

#include<iostream>
using namespace std;
typedef struct
{
	int *data;
	int length;
}Set;

void create(Set &s,int n)
{   s.data=new int[n];
    for(int i=0;i<n;i++)
   {
	cout<<"请输入第"<<i+1<<"个的数据:"; 
    cin>>s.data[i];
	}
	s.length=n;
 } 

void showSet(Set s)
{   for(int i=0;i<s.length;i++)
	cout<<s.data[i]<<" ";
}

bool inset(Set s,int e)
{
	for(int i=0;i<s.length;i++)
	{
	if(s.data[i]==e)
	return true;
	break; 
    }}
}

void add(Set s1,Set s2,Set &s3)
{
	s3.data=new int[s1.length +s2.length];
	s3.length = 0;
	int i=0,j=0;
	for(i=0;i<s1.length;i++){
		s3.data[i]=s1.data[i];
		s3.length++;
	}
	for(j=0;j<s2.length;j++){
		for(i=0;i<s3.length;i++){
			if(s2.data[j]==s3.data[i]){
				break;
			}
		}
		if(s2.data[j]!=s3.data[i]){
				s3.data[s3.length]=s2.data[j];	
				s3.length++;
		}
	}
}

void sub(Set s1,Set s2,Set &s3) 
{   int i;
	s3.data=new int[s1.length];
	s3.length=0;
	for(i=0;i<s1.length;i++)
    for(int j=0;j<s2.length;j++)
    //if(s1.data[i]!=s2.data[j])
   if(!inset(s2,s1.data[i]))
	{
		s3.data[s3.length]=s1.data[i];
		s3.length++;
	}	
}
	


void intersection(Set s1,Set s2,Set &s3) 
{
	s3.data=new int[s1.length];
	s3.length=0;
    for(int i=0;i<s1.length;i++)
    {
	for(int j=0;j<s2.length;j++){
	
    if(s1.data[i]==s2.data[j])
	{
		s3.data[s3.length]=s1.data[i];
		s3.length++;
 }	
}}}
	


int main()
{ Set s1,s2,s3,s4,s5;
  int m,n;
  cout<<"请输入你第一个集合想要输入的数据的个数:"<<endl;
  cin>>m;
  create(s1,m);
  cout<<"请输入你第二个集合想要输入的数据的个数:"<<endl;
  cin>>n;
  create(s2,n);
  showSet(s1);
  cout<<endl; 
  cout<<"两个集合的并集为:"<<endl;
  add(s1,s2,s3);
  showSet(s3);
  cout<<endl;
  cout<<"两个集合的差集为:"<<endl;
  sub(s1,s2,s4);
  showSet(s4);
  cout<<endl;
  cout<<"两个集合的交集为:"<<endl;
  intersection(s1,s2,s5);
  showSet(s5);
}

不知道为啥这个差集错在哪里了,就是得不出来相应得结果,想求各位大佬们帮助!

  • 写回答

1条回答 默认 最新

  • cpp_learners 2021-03-18 08:47
    关注

    我调试你这代码时出错了。

    然后发现时下面代码的问题。

    bool inset(Set s, int e) {
    	for (int i = 0; i < s.length; i++) {
    		if (s.data[i] == e)
    			return true;
    		//break;
    	}
    
    	return false;
    }
    

    最后求差集:

     

    但是有重复值,去重即可。

     

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 chaquopy python 安卓
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 CSS实现渐隐虚线框
  • ¥15 有没有帮写代码做实验仿真的
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥30 vmware exsi重置后登不上
  • ¥15 易盾点选的cb参数怎么解啊
  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容