C语言编程,输入两个数列,求交集!

Posted

tags:

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

C语言编程,输入两个数列,求交集!求大神帮改代码,让重复的数字消失,我真的是不会弄了……

参考技术A #include<stdio.h>
#include<stdlib.h>

int main()

int i,j,k,len=0,a[10],b[10],c[10];

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

scanf("%d",&a[i]);

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

scanf("%d",&b[i]);

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

for(k=0;k<len;k++)

if(a[i]==c[k])

break;


if(k>=len)

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

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

c[len++]=a[i];
break;





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

printf("%d ",c[i]);

printf("\n");
return 0;
参考技术B

追问

#include
int main()

int i,j,a[10],b[10];
for(i=0;i<=9;i++)

scanf("%d",&a[i]);


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

scanf("%d",&b[j]);

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

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

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

printf("%d ",a[i]);



printf("\n");
return 0;

追答

什么意思?我给原来程序加了一行啊。

追问

就是……输入1 2 3 4 5 6 7 8 9 0
5 6 7 8 9 0 5 6 12 14

输入这个

追答

我程序改好了,你修改后运行啊。

追问

然后输出5 6 7 8 9 0

求大神提供修改后的代码!

追答

看上面的图片,请在19行,增加一行,
a[i]=-1;
修改后就可以运行了。

追问

请问大神这是什么原理?

追答

评判它存在的依据已经被“破坏”了,当它再次出现时,在“标本”中再也找不到了,也就是不再同时出现在两个数组中了。

追问

好像……没那么复杂吧……只是单纯的需要在后面在用一个数列来处理掉重复的数据……

😓

追答

你有更简单的当然就更好了。

追问

但是我不太会处理掉重复的数据,我之前想的是再加一个数列,把我现在直接输出的数据放入这个数列,然后再加点条件,去除重复的数字

但要求是这个程序能处理好几组数据,每组数据的交集出来的数字的个数都不一样……

追答

#include
int main()

int i,j,k,a[10],b[10];
for(i=0;i<=9;i++)

scanf("%d",&a[i]);

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

scanf("%d",&b[j]);

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

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

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

printf("%d ",a[i]);
for(k=j+1;k<10;k++)
if(a[i]==b[k])b[k]=-1;



printf("\n");
return 0;

追问

求大神解释加了个b[k]=-1是什么意思?

谢谢!

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语言编程,输入两个数列,求交集!的主要内容,如果未能解决你的问题,请参考以下文章

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

c语言中求交集的一个函数,不知道哪里错了,求高手解答。。。

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

本人碰见一道C语言难题,寻大神帮助,利用C语言实现:求任意两个集合的交集、并集、差集,

如何写一个c语言程序求两个集合的交集

C++求两个集合的交集