任务描述
相关知识
笛卡儿积
编程要求
测试说明
任务描述
本关任务:编写一个能计算两个集合笛卡尔积的小程序。
相关知识
笛卡儿积
集合中的元素是无序的,有些情况下我们需要用固定次序的元素来描述对象,如直角坐标的位置<x,y>,当x
=y,<x,y>和<y,x>代表两个不同的坐标位置。我们称两个具有固定次序的对象为序偶(有序对),记为<x,y>。
设<x,y>和<u,v>两个序偶,若x=u, 且y=v,则称这两个序偶相等,记为<x,y>=<u,v>。
假设A、B是任意两个集合。令A×B={<x,y>∣x∈A且y∈B} 称集合A×B为A和B的笛卡儿积或直积。
例如:设A={a,b},B={1,2,3},则
A×B={<a,1>,<a,2>,<a,3>,<b,1>,<b,2>,<b,3>}
B×A={<1,a>,<2,a>,<3,a>,<1,b>,<2,b>,<3,b>}
A×A={<a,a>,<a,b>,<b,a>,<b,b>}
输出为:
<a, 1>
<a, 2>
<a, 3>
<a, 4>
<b, 1>
<b, 2>
<b, 3>
<b, 4>
编程要求
根据提示,在右侧编辑器 Begin-End 区间补充代码,练习笛卡儿积。
本例中,集合用一维数组表示,假定集合元素均为整数。
测试说明
平台会对你编写的代码进行测试,只有所有输出都正确才能通过。
开始你的任务吧,祝你成功!
/*
* dd.c
*/
#include<stdio.h>
#include<stdlib.h>
int main()
{
int *A;
int *B;
int m,n,i,j;
//输入集合A
scanf("%d",&m);//集合A元素个数
A=(int*)malloc(m*sizeof(int));
for(i=0;i<m;i++)
scanf("%d",A+i);
//输入集合B
scanf("%d",&n);
B=(int*)malloc(n*sizeof(int));
for(i=0;i<n;i++)
scanf("%d",B+i);
//输出笛卡尔积
printf("AXB的笛卡尔积:\n");
/***************begin**************/
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
printf("<%d,%d>\n",A[i],B[j]);
}
}
/************end*****************/
printf("BXA的笛卡尔积:\n");
/***************begin**************/
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
printf("<%d,%d>\n",B[i],A[j]);
}
}
/************end*****************/
free(A);
free(B);
system("pause");
return 0;
}