返回信息流[ema11]报价:以身相许 看看楼下什么报价
这是一条镜像帖。来源:北邮人论坛 / cpp / #88913同步于 2015/9/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
Re: 新人小白求助!用c语言求两个集合的并集,三个集合的笛卡尔
jh1
2015/9/28镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 nuanyangyang 的大作中提到: 】
: 提示一下:
: 并集:两层for循环就行。
: 笛卡尔积:三层for循环就行。
: ...................
谢谢啦,我先试试,主要是一点基础都没有,还要重头学[em70]
写了一个,可能会有错误,希望能对楼主有帮助
#include<stdio.h>
int main() {
int i = 0;
int j = 0;
int k = 0;
char c1[10000] = { 0 };
_Bool c2[128] = { 0 };
_Bool c3[3][128] = { 0 };
printf("输入两行字符串,表示两个集合中的字符\n");
scanf("%[^\n]", c1);
for (i = 0; c1[i]; i++) {
c2[c1[i]] = 1;
}
getchar();
scanf("%[^\n]", c1);
for (i = 0; c1[i]; i++) {
c2[c1[i]] = 1;
}
printf("并集如下:\n{");
for (i = 0; i < 128; i++) {
if (c2[i]) printf("%c ", i);
}
printf("}\n输入三行字符串,表示三个集合中的字符\n");
for (i = 0; i < 3; i++) {
getchar();
scanf("%[^\n]", c1);
for (j = 0; c1[j]; j++) {
c3[i][c1[j]] = 1;
}
}
getchar();
printf("笛卡尔积如下:\n");
for (i = 0; i < 128; i++) {
if (c3[0][i]) {
for (j = 0; j < 128; j++) {
if (c3[1][j]) {
for (k = 0; k < 128; k++) {
if (c3[2][k]) {
printf("{%c,%c,%c} ", i, j, k);
}
}
}
}
}
}
return 0;
}
【 在 jyr 的大作中提到: 】
: lz小白一枚,最近学离散数学,老师要用C语言求两个集合的并集,三个集合的笛卡尔积,集合中的元素定义成字符型。无奈楼主文科出身,并没有学过C语言,眼看deadline一天天逼近,lz毫无头绪,特来此求大神帮帮忙,让lz能顺利完成作业,感激不尽!!!
【 在 chenxiansf 的大作中提到: 】
: 写了一个,可能会有错误,希望能对楼主有帮助
: [code=c]
: #include<stdio.h>
: ...................
太感谢了
感觉有点问题, 笛卡尔积结果是不能有重复的元素的,如果第一个集合和第二个集合有交集,那么3个集合笛卡尔积就会有重复的元素,你这里好像没有考虑到。不知道说的对不对?还望赐教。
【 在 chenxiansf 的大作中提到: 】
: 写了一个,可能会有错误,希望能对楼主有帮助
: [code=c]
: #include<stdio.h>
: ...................
笛卡尔积有没有前后顺序之分?比如(3,4)和(4,3)是不是一样的。如果不一样,那两集合有交集就没影响吧。如果是一样的,那我应该就写错了
【 在 tpclark (tpclark) 的大作中提到: 】
: 感觉有点问题, 笛卡尔积结果是不能有重复的元素的,如果第一个集合和第二个集合有交集,那么3个集合笛卡尔积就会有重复的元素,你这里好像没有考虑到。不知道说的对不对?还望赐教。
是的, 你写的没有问题, 我理解笛卡尔积的时候理解错了,[em6]
【 在 chenxiansf 的大作中提到: 】
: 笛卡尔积有没有前后顺序之分?比如(3,4)和(4,3)是不是一样的。如果不一样,那两集合有交集就没影响吧。如果是一样的,那我应该就写错了