zoukankan      html  css  js  c++  java
  • 判断是否构成群

    给定一个运算表,判断它是否构成群

    群定义:表示一个拥有满足封闭性、满足结合律、有单位元、有逆元的二元运算的代数结构

    输入

    • 第一行是一个正整数m,表示运算表的个数
    • 接下来是m个运算表。每个运算表的第一行是集合的元素个数n,集合元素用小写字母a,b,c,…表示,例如,n=3时,元素分别为a,b,c
    • 每个运算表用多个串表示,例如,n=3的一个运算表:
    abc 
    bca 
    cab 
    

    表示运算表: file

    输出

    对于每个运算表,按照以下格式打印输出该运算表以及是否构成群:

    a b c  
    b c a 
    c a b  
    Group:Yes/No
    

    注意,

    • 运算表中每个字母后留一个空格
    • 如果构成群,则打印
    Group:Yes
    

    否则打印

    Group:No
    

    输入样例

    2
    3
    abc
    bca
    cab
    3
    abc
    acb
    bca
    

    输出样例

    a b c 
    b c a 
    c a b 
    Group:Yes
    a b c 
    a c b 
    b c a 
    Group:No
    

    代码实现

    #include <stdio.h>
    int main(){
    	int matrixnum = 0;
    	scanf("%d",&matrixnum);
    	for(int i = 0; i < matrixnum; i++){
    		int size;//矩阵大小 
    		int flag = 1;
    		scanf("%d",&size);
    		char matrix[10][10];
    		for(int j = 0; j < size; j++){
    			  	scanf("%s",matrix[j]);
    		}
    		
    		for(int j = 0; j < size; j++){
    			for(int k = 0; k < size; k ++){
                    printf("%c ",matrix[j][k]);
                    //判断封闭性 
                    if(matrix[j][k]>'a'+size-1)flag = 0;
    			}
                putchar('
    ');
    		}
    		//判断结合律 
            for(int j = 0; j < size; j++){
                for(int k = 0; k < size; k ++){
                    for(int i = 0; i < size; i++){
                        if(matrix[matrix[j][k]-'a'][i]!=matrix[j][matrix[k][i]-'a'])flag = 0;
                    }
                }
            }
            //判断单位元
            int hasidentity = 0;
            int identity  =0;
            for(int j = 0; j < size; j++){
            	int cnt = 0;
            	for(int k = 0; k < size; k ++){
            		if(matrix[j][k] == k+'a' && matrix[k][j] == k+'a')cnt++;
    			}
    			if(cnt == size){
    				hasidentity = 1;
    				identity = j;
    			}
    		}
    		if(hasidentity == 0)flag = 0;	
    		
    		//判断逆元 
    		int arr[size] = {0};
    		for(int j = 0; j < size; j ++){
    			for(int k = 0; k < size; k++){
    				if(matrix[j][k] == j+'a' )arr[j]=1;
    			}
    		}
    		for(int j = 0; j < size; j++){
    			if(arr[j]==0)flag = 0;
    		}
    
    		if(flag == 1)printf("Group:Yes
    ");
    		else printf("Group:No
    ");
    	}
    }
    
  • 相关阅读:
    Error: Client network socket disconnected before secure TLS connection was established
    python对文章词频的统计
    IntelliJ IDEA创建java空项目
    java提取docx文件中的图片
    vue v-for 循环复选框-默认勾选第一个的实现方法
    nodejs的request创建的get和post请求,带参数
    python list转换字符串报错TypeError: sequence item 0: expected str instance, int found
    linux常用命令
    ES9(2018) 正则表达式命名捕获组
    ESLint+Prettier代码规范实践
  • 原文地址:https://www.cnblogs.com/miaomiaolan/p/13060279.html
Copyright © 2011-2022 走看看