判斷是否構成群


給定一個運算表,判斷它是否構成群

群定義:表示一個擁有滿足封閉性、滿足結合律、有單位元、有逆元的二元運算的代數結構

輸入

  • 第一行是一個正整數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('\n');
		}
		//判斷結合律 
        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\n");
		else printf("Group:No\n");
	}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM