|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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
请问这个程序应该怎么写?下面这个程序为什么啥都输出不了?
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int a[10]={1,3,5,7,9,11,13,15,17,19},b[]={0},k,c[]={0},i,t;
- scanf("%d",&k);
- for(i=1;i<=k;i++)
- scanf("%d",&b[k]);
- if(a[i]==b[k])
- c[t]=a[i];
- printf("%d",c[t]);
- return 0;
- }
复制代码
首先为了加快测试节奏
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个数。
- #include<stdio.h>
- #include<math.h>
- int main()
- {
- int a[10]={1,3,5,7,9,11,13,15,17,19};
- int b[]={1,2,3,4,5,6,7,8,9,10};
- int c[10];
- int c_ptr=0;
- for(int i=0;i<10;i++) for(int j=0;j<10;j++) if(a[i]==b[j]) c[c_ptr++] = a[i];
- for(int i=0;i<c_ptr;i++) printf("c[%d]=%d\n",i,c[i]);
- system("pause");
- return 0;
- }
复制代码
|
|