鱼C论坛

 找回密码
 立即注册
查看: 2344|回复: 6

[已解决]集合AB的交集

[复制链接]
发表于 2020-5-23 19:52:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
求集合A和集合B的交集,即所有同时在集合A和集合B中的元素。已知数组a存放集合A的元素,共10个整数:

{1,3,5,7,9,11,13,15,17,19}

编程完成: 输入整数k(1<=k<=10),表示集合B元素的个数;输入集合B的各元素,集合元素各不相同;求集合A和集合B的交集C,输出交集C中的各个元素。

输入格式:
第一行输入k

第二行输入B集合的元素(整数),数之间用空隔分开

输出格式:
交集C中的元素,每个元素后有1个空格

输入样例:
10
1 2 3 4 5 6 7 8 9 10
输出样例:
1 3 5 7 9

请问这个程序应该怎么写?下面这个程序为什么啥都输出不了?
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         int a[10]={1,3,5,7,9,11,13,15,17,19},b[]={0},k,c[]={0},i,t;
  6.         scanf("%d",&k);
  7.         for(i=1;i<=k;i++)
  8.                 scanf("%d",&b[k]);
  9.         if(a[i]==b[k])
  10.                 c[t]=a[i];
  11.         printf("%d",c[t]);
  12.         return 0;
  13. }
复制代码

最佳答案
2020-5-24 16:35:36
首先为了加快测试节奏
for(i=1;i<=k;i++)
    scanf("%d",&b[k]);
第一步奏:以上代码,一开始,也和a一样,int b[10]={1,2,3,4,5,6,7,8,9,10};赋值
然后求集合A和集合B的交集C,输出交集C中的各个元素。
这一步对了,再把b={}的固定值设定,改成可以手动输入。

这个交集很麻烦,有java的hashmap就好了,因为他要先排序a,b,然后a,b一个一个比较。
或者是全比较,但也有问题,如果a={3,3,3,3,3,3,3,3,3,3},b={3,3,3,3,3,3,3,3},使用
for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(a[i]==b[j]) c[c_ptr++] = a[i];
就会向C加100个数。

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.     int a[10]={1,3,5,7,9,11,13,15,17,19};
  6.     int b[]={1,2,3,4,5,6,7,8,9,10};
  7.     int c[10];
  8.     int c_ptr=0;
  9.     for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(a[i]==b[j]) c[c_ptr++] = a[i];

  10.     for(int i=0;i<c_ptr;i++) printf("c[%d]=%d\n",i,c[i]);
  11.     system("pause");
  12.     return 0;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-23 20:02:26 From FishC Mobile | 显示全部楼层
连循环都不用???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-23 20:04:36 | 显示全部楼层
wp231957 发表于 2020-5-23 20:02
连循环都不用???

在printf之前吗
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 20:18:04 | 显示全部楼层
初学者,就不要省略大括号了,好不好。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 20:57:48 | 显示全部楼层
赚小钱 发表于 2020-5-23 20:18
初学者,就不要省略大括号了,好不好。

强烈同意
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 08:29:24 | 显示全部楼层
你没有大括号呀
for (;;)
{
    //应该这样写
}

if ()
{
    //也是这样写
}
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-24 16:35:36 | 显示全部楼层    本楼为最佳答案   
首先为了加快测试节奏
for(i=1;i<=k;i++)
    scanf("%d",&b[k]);
第一步奏:以上代码,一开始,也和a一样,int b[10]={1,2,3,4,5,6,7,8,9,10};赋值
然后求集合A和集合B的交集C,输出交集C中的各个元素。
这一步对了,再把b={}的固定值设定,改成可以手动输入。

这个交集很麻烦,有java的hashmap就好了,因为他要先排序a,b,然后a,b一个一个比较。
或者是全比较,但也有问题,如果a={3,3,3,3,3,3,3,3,3,3},b={3,3,3,3,3,3,3,3},使用
for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(a[i]==b[j]) c[c_ptr++] = a[i];
就会向C加100个数。

  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.     int a[10]={1,3,5,7,9,11,13,15,17,19};
  6.     int b[]={1,2,3,4,5,6,7,8,9,10};
  7.     int c[10];
  8.     int c_ptr=0;
  9.     for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(a[i]==b[j]) c[c_ptr++] = a[i];

  10.     for(int i=0;i<c_ptr;i++) printf("c[%d]=%d\n",i,c[i]);
  11.     system("pause");
  12.     return 0;
  13. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-14 00:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表