c++ 离散数学 群的相关判断及求解
采用C/C++/其它语言编程,构造一个n阶群<G={a,b,c,…},*>,G的阶|G|满足:3<=|G|<=6
1、判断该群是否是循环群,若是,输出该群的某个生成元。
2、给出每一个元素的阶和逆元
#include<iostream> using namespace std;
//返回元素下标
//n为集合元素个数,set[]为存放元素集合,s为要求下标的元素
int sub(int n, char set[], char s)
{
for (int i = ; i < n; i++)
{
if (set[i] == s)
return i;
}
} //判断群是不是循环群
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
int Iscyc(int n, char set[], char ele[][])
{
int x, count;
int cnt;
for (int i = ; i < n; i++)
{
count = ;//计量---集合中的元素是否由set[i]的幂组成 for (int j = ; j < n; j++)
{
x = i;
cnt = ;//防止死循环
if (set[j] == set[i])
count++;
if (set[j] == ele[x][i])
count++; while (set[j] != ele[x][i] && cnt < n)
{
x = sub(n, set, ele[x][i]);
cnt++;
if (set[j] == ele[x][i])
count++;
} }
if (count == n)
return ;
}
return ; } //输出循环群的生成元
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
void gen(int n, char set[], char ele[][])
{
int x, count;
int cnt;
for (int i = ; i < n; i++)
{
count = ;
for (int j = ; j < n; j++)
{
x = i;
cnt = ;
if (set[j] == set[i])
count++;
if (set[j] == ele[x][i])
count++;
while (set[j] != ele[x][i] && cnt < n)
{
x = sub(n, set, ele[x][i]);
cnt++;
if (set[j] == ele[x][i])
count++;
}
}
if (count == n)
cout << "循环群的生成元是:" << set[i] << endl;
}
} //给出群中每个元素的阶
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组,ie为幺元
void order(int n, char set[], char ele[][], char ie)
{
int x, cnt;
for (int i = ; i < n; i++)
{
if (set[i] != ie)
{
x = i;
cnt = ;
if (ele[x][i] == ie)
cout << set[i] << "的阶是" << cnt << endl;
while (ele[x][i] != ie)
{
x = sub(n, set, ele[x][i]);
cnt++;
if (ele[x][i] == ie)
{
cout << set[i] << "的阶是" << cnt << endl;
break;
}
}
}
else
cout << set[i] << "的阶是1" << endl;
} } //输出群中每个元素的逆元
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
//ie为幺元
void inver(int n, char set[], char ele[][], char ie)
{ for (int i = ; i < n; i++)
for (int j = ; j < n; j++)
{
if (ele[i][j] == ie)
{
cout << set[i] << "的逆元是" << set[j] << endl;
break;
}
} } int main()
{
cout << "请输入元素的个数(要求3到6之间)" << endl;
int inputnum;
cin >> inputnum;
cout << "请输入元素" << endl;
char Y[];
for (int i = ; i < inputnum; i++)
{
cin >> Y[i];
}
cout << "请输入群的幺元" << endl;
char e;
cin >> e;
char outputform[][];
char out1[][];
outputform[][] = '*';
for (int i = ; i <= inputnum; i++)
{
outputform[][i] = Y[i - ];
outputform[i][] = Y[i - ];
}
int m;
for (int i = ; i < inputnum; i++)
{
if (Y[i] == e)
{
m = i;
break;
}
}
int n = m;
int r = m;
for (int i = ; i < inputnum; i++)
{
out1[n%inputnum][m] = Y[n%inputnum];
n = n + ;
}
int q;
for (int i = ; i < inputnum; i++)
{
q = ;
for (int y = ; y < inputnum; y++)
{
if (out1[i][m] == Y[y])
{
q = y;
break;
}
}
for (int j = m; j < inputnum + m; j++)
{
out1[i][j%inputnum] = Y[q%inputnum];
q++;
}
}
for (int i = ; i <= inputnum; i++)
{
for (int j = ; j <= inputnum; j++)
{
outputform[i][j] = out1[i - ][j - ];
}
}
for (int i = ; i <= inputnum; i++)
{
for (int j = ; j <= inputnum; j++)
{
cout << outputform[i][j] << ' ';
}
cout << endl;
} cout << "---------------------------" << endl;
if (Iscyc(inputnum, Y, out1))
{
cout << "<G,*>是循环群" << endl;
gen(inputnum, Y, out1);
}
else
cout << "<G,*>不是循环群" << endl;
cout << "---------------------------" << endl;
order(inputnum, Y, out1, e);
cout << "---------------------------" << endl;
inver(inputnum, Y, out1, e); return ;
}
c++ 离散数学 群的相关判断及求解的更多相关文章
- 深入浅出—Redis集群的相关详解
前言: 这篇文章主要介绍了Redis集群的相关,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值. 注意!要求使用的都是redis3.0以上的版本,因为3.0以上增加了red ...
- PostgreSQL集群方案相关索引页
磨砺技术珠矶,践行数据之道,追求卓越价值 返回顶级页:PostgreSQL索引页 本页记录所有本人所写的PostgreSQL的集群方案相关文摘和文章的链接: pgpool-II: 1 pgpool-I ...
- nbu集群Alwayson相关问题
Alwayson 1. Alwayson 是否依赖于域环境? 答: 是, alwayson依赖于故障转移群集(只有在故障转移群集中的SQL Server 才能启动高可行性组功能),而故障转移群集愈依赖 ...
- redis集群及相关的使用
从redis 3.0之后版本支持redis-cluster集群,Redis-Cluster采用无中心结构,每个节点保存数据和整个集群状态,每个节点都和其他所有节点连接. 1.所有的redis节点彼此互 ...
- js相关判断
//正则表达式判断是否为空 /^\s*?$/.test(obj) //批量转换方法 function sort(s){return s.match(/\d/g).sort()+'' } //判断是否相 ...
- oracle集群部署相关文章
1. Oracle数据库HA架构方案介绍:http://blog.sina.com.cn/s/blog_7273b6cc0100p0sr.html 2.Oracle 集群概念和原理
- Centos7安装Nacos单机模式以及集群模式(包含nignx安装以及实现集群)的相关配置
Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos支持三种部署模式 单机模式 - 用于测试 ...
- 基于粒子群算法求解求解TSP问题(JAVA)
一.TSP问题 TSP问题(Travelling Salesman Problem)即旅行商问题,又译为旅行推销员问题.货郎担问题,是数学领域中著名问题之一.假设有一个旅行商人要拜访n个城市,他必须选 ...
- 数值计算:粒子群优化算法(PSO)
PSO 最近需要用上一点最优化相关的理论,特地去查了些PSO算法相关资料,在此记录下学习笔记,附上程序代码.基础知识参考知乎大佬文章,写得很棒! 传送门 背景 起源:1995年,受到鸟群觅食行为的规律 ...
随机推荐
- PHP安装模式cgi、fastcgi、php_mod比较
先了解一下普通cgi的工作流程: web server收到用户请求,并把请求提交给cgi程序,cgi程序根据请求提交的参数作相应处理,然后输出标准的html语句返回给web server,web se ...
- 【Android学习】Windows下Android环境搭建
一. JDK下载配置 直接百度,很简单. 二.android JDK下载配置 1.进入下载官网(需要FQ):https://developer.android.com/studio/index.ht ...
- C和指针 第九章 字符串 字符 字节
C语言中没有字符串类型,字符串是以NUL结尾的字符数组组成的. 高级字符串查找: //计算字符串起始部分,有多少字符是在group中 size_t strspn(char const * str, c ...
- Fedora中允许mysql远程访问的几种方式
Fedora中允许mysql远程访问,可以使用以下两种方式:a.改表. mysql>use mysql; mysql>update user set host = '%' where us ...
- Ubuntu16.04 安装MATALAB R2015b教程
1.安装 将镜像文件内文件解压出来,添加执行权限,否则执行 ./install指令会出错 chmod -R 777 MATALAB 执行如下指令 ./install 2.填入补丁内的密匙 在Matla ...
- jQuery视差滚动插件,(附原理分析,调用方法)
演示地址:http://www.jq22.com/jquery-info1799 jquery插件,使用验证过可用. 分析源代码后总结原理:设置background样式为fixed,判断浏览器滚动距离 ...
- python第15天
Python之Web前段: 一. JavaScript 一. JavaScript 1. 什么是JavaScript ? JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释 ...
- vim 使用
vim有三种模式:输入模式,命令模式,底行模式,使用esc进入命令模式,在命令模式下按英文的冒号,进入底行模式:命令行模式下按i进入输入模式.vim编辑文件是将文件内容复制到缓冲区显示在屏幕上. vi ...
- HTML登录注册界面怎么制作?
在没有学习CSS样式的前提下,是如何做一个简单的注册界面的. 一.表单标签(form) 首先我们先写一个<form></form>的标签,form标签属于表单标签,通常我们的登 ...
- jwplayer播放器停止 单页内多个jwplayer对象停止问题
单页内多个jwplayer对象停止问题,一直没有找到单页内多个jwplayer播放器停止问题,点击其中一个停止其他播放器; 整个播放代码Remove(),这样就可以停止了,也在ie下防止暂停不了.重音 ...