完善下列代码,要求如下:请完成判断函数f1 输入格式: 第一行输入代数系统<A,o>的集合A的元素个数,第二行输入A的元素(int型),第三行开始输入运算表的每一行。 输出格式: 如果运算o具有可结合性,则输出"A is associativity"。否则,输出"A is not associativity";注意,字符串两端均没有空格,末尾有回车符。代码如下:#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"); }
时间: 2024-03-07 08:47:37 浏览: 84
完善代码如下:
```
#include <stdio.h>
//判断代数系统a的运算表op是否可结合
//返回值为1,可结合;
//返回值为0,不可结合;
int f1(int* a, int** op, int n) {
//begin****
for(int i=0; i<n; i++){ // 遍历每一行
for(int j=0; j<n; j++){ // 遍历每一列
for(int k=0; k<n; k++){ // 遍历每一个元素
if(op[i][op[j][k]] != op[op[i][j]][k]){ // 如果不满足结合律
return 0; // 返回不可结合
}
}
}
}
return 1; // 如果循环完毕都满足结合律,则返回可结合
//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");
}
```
主要思路是:对于每一个元素,都判断一下运算的结果是否满足结合律。如果所有元素都满足结合律,则认为这个运算是可结合的。
阅读全文