#include <stdio.h> //判断代数系统a的运算表op是否可结合 //返回值为1,可结合; //返回值为0,不可结合; int f1(int* a, int** op, int n) { //*****************begin********************* //***************end************************ } int main() { int n,i,j,k,l; scanf("%d",&n);//输入集合中元素的个数 int *a = new int[n]; for (i = 0; i < n; i++) { scanf("%d",&a[i]);//输入集合中的元素 } int** op = new int*[n]; for(i = 0; i < n; i++){ op[i] = new int[n]; for(j = 0; j < n; j++){ scanf("%d",&op[i][j]);//输入运算表矩阵,应保证输入值属于a中的元素 } } int e = f1(a,op,n); if(e==1)printf("A is associativity\n"); else printf("A is not associativity\n"); }
时间: 2023-07-05 10:34:03 浏览: 92
以下是实现代码:
```c
#include <stdio.h>
#include <stdlib.h>
// 判断代数系统a的运算表op是否可结合
// 返回值为1,可结合;
// 返回值为0,不可结合;
int f1(int* a, int** op, int n) {
int i, j, k;
for(i = 0; i < n; i++)
for(j = 0; j < n; j++)
for(k = 0; k < n; k++)
if(op[op[i][j]][k] != op[i][op[j][k]])
return 0; // 不可结合
return 1; // 可结合
}
int main()
{
int n, i, j;
scanf("%d", &n); // 输入集合中元素的个数
int* a = (int*)malloc(n * sizeof(int)); // 动态分配数组a
for(i = 0; i < n; i++)
scanf("%d", &a[i]); // 输入集合中的元素
int** op = (int**)malloc(n * sizeof(int*)); // 动态分配二维数组op
for(i = 0; i < n; i++)
{
op[i] = (int*)malloc(n * sizeof(int));
for(j = 0; j < n; j++)
scanf("%d", &op[i][j]); // 输入运算表矩阵,应保证输入值属于a中的元素
}
int e = f1(a, op, n);
if(e == 1)
printf("A is associativity\n");
else
printf("A is not associativity\n");
for(i = 0; i < n; i++)
free(op[i]);
free(op);
free(a);
return 0;
}
```
阅读全文