如何用数组实现集合的并,交和差运算

如何用数组实现集合的并,交和差运算,第1张

#include <stdioh>

#include <stdlibh>

#include <iostream>

using namespace std;

//交集

void Intersection(int a[], int b[], int m, int n)

{

cout<<"两集合交集:";

for(int i = 0; i < m; i++)

{

for(int j = 0; j < n; j++)

{

if(a[i] == b[j])

{

cout<<a[i]<<' ';

break;

}

}

}

cout<<endl;

}

//并集

void AddSets(int a[], int b[], int m, int n)

{

int flag;

cout<<"两集合并集:";

for(int i = 0; i < m; i++)

{

flag = true;

for(int j = 0; j < n; j++)

{

if(a[i] == b[j])

{

flag = false;

break;

}

}

if(flag) cout<<a[i]<<' ';

}

for(int j = 0; j < n; j++)

{

cout<<b[j]<<' ';

}

cout<<endl;

}

//差集

void SubSets(int a[], int b[], int m, int n)

{

int flag;

cout<<"两集合差集:";

for(int i = 0; i < m; i++)

{

flag = true;

for(int j = 0; j < n; j++)

{

if(a[i] == b[j])

{

flag = false;

break;

}

}

if(flag) cout<<a[i]<<' ';

}

cout<<endl;

}

void main()

{

int n1;

int n2;

int a[100];

int b[100];

cout<<"请输入第一个数组大小:";

cin>>n1;

cout<<"请输入第一个数组元素:";

for (int i = 0; i < n1; i++)

{

cin>>a[i];

}

cout<<"请输入第二个数组大小:";

cin>>n2;

cout<<"请输入第二个数组元素:";

for (i = 0; i < n2; i++)

{

cin>>b[i];

}

Intersection(a, b, n1, n2);

AddSets(a, b, n1, n2);

SubSets(a, b, n1, n2);

getchar();

}

#include <stdioh>

#include <stdlibh>

#include <stringh>

//mat97

//以下是双链表的节点结构,每个节点存储一个4位的数,比如1,0031,0056存入链表后就是1,31,56三个节,输出的时候再补0输出!

typedef struct node{

  int n;

  struct node next;

  struct node prev;

} node;

node p;

char num1[1024],num2[1024];

int conv(char a)

{

  int n=0,i;

  for(i=0;a[i];++i)

  {

      n=10;

      n+=(a[i]-'0');

  }

  return n;

}

int main()

{

  char c[2];

  int i,f;

  node q;

  p=(node)malloc(sizeof(node));

  p->next=p->prev=0;

  q=p;

  num1[0]=num2[0]=',';

  printf("Enter num 1:\n");

  scanf("%s",num1+1);

  for(i=strlen(num1);i>=0;--i)

  {

      if(num1[i]==',')

      {

          num1[i]=0;

          q->next=(node)malloc(sizeof(node));

          q->next->prev=q;

          q->next->next=0;

          q=q->next;

          q->n=conv(num1+i+1);

      }

  }

  q->next=p;

  p->prev=q;

  printf("Enter op:\n");

  scanf("%s",c);

  c=c=='+'0:1;

  printf("Enter num 2:\n");

  scanf("%s",num2+1);

  q=p;f=0;

  if(!c) //+

  {

      for(i=strlen(num2);i>=0;--i)

      {

          if(num2[i]==',')

          {

              num2[i]=0;

              if(q->next==p)

              {

                  q->next=(node)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=0;

                  p->prev=q->next;

              }

              q=q->next;

              q->n+=(conv(num2+i+1)+f);

              if(q->n<10000)

                  f=0;

              else

              {

                  f=1;

                  q->n-=10000;

              }

          }

      }

      if(f)

      {

          if(q->next==p)

          {

              q->next=(node)malloc(sizeof(node));

              q->next->next=p;

              q->next->prev=q;

              q->next->n=1;

          }

          else

          {

              while(q->next!=p)

              {

                  q=q->next;

                  q->n+=1;

                  if(q->n<10000)

                  {

                      f=0;

                      break;

                  }

                  else

                  {

                      q->n=0;

                      f=1;

                  }

              }

              if(f)

              {

                  q->next=(node)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=1;

              }

          }

      }

      printf("%d,",p->prev->n);

      for(q=p->prev->prev;q!=p;q=q->prev)

          printf("%04d,",q->n);

  }

  else //-

  {

      for(i=strlen(num2);i>=0;--i)

      {

          if(num2[i]==',')

          {

              num2[i]=0;

              if(q->next==p)

              {

                  q->next=(node)malloc(sizeof(node));

                  q->next->next=p;

                  q->next->prev=q;

                  q->next->n=0;

                  p->prev=q->next;

              }

              q=q->next;

              q->n-=(conv(num2+i+1)+f);

              if(q->n>=0)

                  f=0;

              else

              {

                  f=1;

                  q->n+=10000;

              }

          }

      }

      if(f)

      {

          if(q->next==p)

          {

              q->n-=10000;

          }

          else

          {

              while(q->next!=p)

              {

                  q=q->next;

                  q->n-=1;

                  if(q->n>=0)

                  {

                      f=0;

                      break;

                  }

                  else

                  {

                      q->n+=10000;

                      f=1;

                  }

              }

              if(f)

              {

                  q->n-=10000;

              }

          }

      }

      printf("%d,",p->prev->n);

      for(q=p->prev->prev;q!=p;q=q->prev)

          printf("%04d,",q->n);

  }

  return 0;

}

纯手打,已测试,楼主先看着,有不懂的再追问

加法:

减法:

编码辛苦,希望各位大神不要copy,小弟跪谢……

#include <iostream>

using namespace std;

int main()

{

double sum=0,s=0,e;

int n;

cout << "输入数组元素个数" <<endl;

cin>>n;

int a=new int[n];

for(int i=0; i<n;i++){

cout<<"输入第"<<i<<"个数"<<endl;

cin>>a[i];

}

for(i=0;i<n;i++) //求和

sum+=a[i];

e=sum/n; //求平均值

cout<<"[" ;

for(i=0;i<n;i++){ //求方差

cout<<"("<<a[i]<<"-"<<e<<")("<<a[i]<<"-"<<e<<")";

if(i!=n-1)

cout<<"+";

s+=(a[i]-e)(a[i]-e);

}

cout<<"]/"<<n;

s=s/n;

cout <<"="<<s<<"(方差)"<<endl;

return 0;

}

以上就是关于如何用数组实现集合的并,交和差运算全部的内容,包括:如何用数组实现集合的并,交和差运算、设计一个程序实现两个任意长的整数求和与差的运算、用C++写一个计算方差的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/10098422.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存