C++编程,从键盘输入两个数组,求两个数组的交集并输出。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++编程,从键盘输入两个数组,求两个数组的交集并输出。相关的知识,希望对你有一定的参考价值。

比如输入a【】=1,2,3,4,5,6,b[]=4,5,8,9那么交集c【2】=4,5。

比如: A = 1 3 4 5 7, B = 2 3 5 8 9, 那么交集就是 3 5.

思路:

1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存。该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度。
参考技术A 获取键盘输入的代码应该不用贴出来了吧
void main()
//定义数组
int a[] = 1,2,3,4,5,6;
int b[] = 5,6,7,8;
//获取数组长度
int arrayLA = getArrayLen(a);
int arrayLB = getArrayLen(b);
//交集数组
int c[];
int arrayLC;
//将两个数组的每个元素进行比较,获取相同数组,即交集
for(int i = 0; i < arrayLA;i++)
for(int j = 0; j < arrayLB;j++)
if(a[i] = b[j])
//将交集放置在交集数组中
c[arrayLC] = a[i];
//交集数组下标加一
arrayLC++;



cout << c <<endl;
cout << "数组的长度:" << getArrayLen(c) << endl;

int getArrayLen(T& array)
//使用模板定义一 个函数getArrayLen,该函数将返回数组array的长度
return (sizeof(array) / sizeof(array[0]));
参考技术B 可以一次读入N个数据。可以考虑以回车结束读入的一组。
参考如下写法:
#include "stdio.h"
#define Max 100
int X[Max]=0,,Y[Max]=0,;
int main()

int i=0,j=0;
int a,b;
char c=0;

printf("输入第一个数组(以空格分开,回车结束)");
while((c!='\n'))
scanf("%d%c",X+i++,&c);
c=0;
printf("输入第二个数组(以空格分开,回车结束)");
while((c!='\n'))
scanf("%d%c",Y+j++,&c);

for(a=0;a<i;a++)
for(b=0;b<j;b++)
if(X[a]==Y[b])
printf("%d \t",X[a]);
return 0;

如果能知道自己喜欢的又觉得不错的就可以了用手机啦。
参考技术C

按照题目要求编写的程序如下(见图,图中重复的地方只需写一次)

参考技术D 还是有机会的太厉害了。

C++求两个集合的交集

#include<iostream.h>
void main()

int a[5],b[5],c[5];
int i,j,k;
int *p1,*p2,*p3;
cout<<"请输入数组a:";
for(i=0;i<5;i++)
cin>>a[i];
cout<<"请输入数组b:";
for(j=0;j<5;j++)
cin>>b[j];
p1=&a[i];p2=&b[j];p3=&c[0];
for(i=0;i<5;i++)

for(j=0;j<5;j++)

if(*p1==*p2++)
*p3++=*p1;


cout<<"a数组为:";
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
cout<<"b数组为:";
for(j=0;j<5;j++)
cout<<b[j]<<' ';
cout<<endl;
cout<<"c数组为:";
for(k=0;k<5;k++)
cout<<c[k]<<' ';
cout<<endl;

就是要将a,b都赋值给c,用指针。。。

改过来啦!你的p1,p2初始化有错误。而且在求交集的时候p1应该初始化在第一层循环内这样内循环每经过一轮的判断,p1又能回到数组a的首地址。注意输入a、b数组的值时不要有重复的值,否则出错,事实上集合中也不允许有重复的元素。哪里不清楚Hi我。
#include<iostream.h>
void main()

int a[5],b[5],c[5]=0;//n是用来统计相同的元素总共多少个
int i,j,k,n=0;
int *p1,*p2,*p3;
cout<<"请输入数组a:";
for(i=0;i<5;i++)
cin>>a[i];
cout<<"请输入数组b:";
for(j=0;j<5;j++)
cin>>b[j];
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

cout<<"a数组为:";
for(i=0;i<5;i++)
cout<<a[i]<<' ';
cout<<endl;
cout<<"b数组为:";
for(j=0;j<5;j++)
cout<<b[j]<<' ';
cout<<endl;
cout<<"c数组为:";
for(k=0;k<n;k++)
cout<<c[k]<<' ';
cout<<endl;
参考技术A #include<stdio.h>
void main()

int a[5],b[5],c[5]=0;
int i,j,k,n=0;
int *p1,*p2,*p3;
for(i=0;i<5;i++)
scanf("%d",&a[i]);
for(j=0;j<5;j++)
scanf("%d",&b[j]);
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<5;j++)
printf("%d ",b[j]);
printf("\n");
for(k=0;k<n;k++)
printf("%d ",c[k]);
printf("\n");
参考技术B #include<stdio.h>
void main()

int a[5],b[5],c[5]=0;
int i,j,k,n=0;
int *p1,*p2,*p3;
printf("请输入数组a:");
for(i=0;i<5;i++)
scanf("%d",&a[i]);
printf("请输入数组b:");
for(j=0;j<5;j++)
scanf("%d",&b[j]);
p1=&a[0];p3=&c[0];
for(i=0;i<5;i++)

p2=&b[0];
for(j=0;j<5;j++)

if(*p1==*p2++)

*p3++=*p1;
n++;


p1++;

for(i=0;i<5;i++)
printf("%d ",a[i]);
printf("\n");
for(j=0;j<5;j++)
printf("%d ",b[j]);
printf("\n");
for(k=0;k<n;k++)
printf("%d ",c[k]);
printf("\n");

以上是关于C++编程,从键盘输入两个数组,求两个数组的交集并输出。的主要内容,如果未能解决你的问题,请参考以下文章

利用go语言实现求数组交集的算法

如何求两个数组的交集??

c语言求两个数组的并交集

从键盘输入两个长度不一样的数组,然后怎么把他们合并在一个里面,按从小到大的输出?java的,求代码

求两个数组的交集

求两个数组的交集