C/C++学习交流群(QQ,微信)

QQ群号:259910495

微信群二维码,用普通微信扫码

 C/C++学习交流群(QQ,微信)

#include<iostream>

using namespace std;
//返回元素下标
//n为集合元素个数,set[]为存放元素集合,s为要求下标的元素
int sub(int n, char set[], char s)
{
    for (int i = 0; i < n; i++)
    {
        if (set[i] == s)
            return i;
    }
}

//判断群是不是循环群
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
int Iscyc(int n, char set[], char ele[][6])
{
    int x, count;
    int cnt;
    for (int i = 0; i < n; i++)
    {
        count = 0;//计量---集合中的元素是否由set[i]的幂组成

        for (int j = 0; j < n; j++)
        {
            x = i;
            cnt = 2;//防止死循环
            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 1;
    }
    return 0;

}

//输出循环群的生成元
//n为群的阶数,,set[]为存放集合元素的数组,ele[6][6]为存放群运算表的二维数组
void gen(int n, char set[], char ele[][6])
{
    int x, count;
    int cnt;
    for (int i = 0; i < n; i++)
    {
        count = 0;
        for (int j = 0; j < n; j++)
        {
            x = i;
            cnt = 2;
            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[][6], char ie)
{
    int  x, cnt;
    for (int i = 0; i < n; i++)
    {
        if (set[i] != ie)
        {
            x = i;
            cnt = 2;
            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[][6], char ie)
{

    for (int i = 0; i < n; i++)
        for (int j = 0; 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[4];
    for (int i = 0; i < inputnum; i++)
    {
        cin >> Y[i];
    }
    cout << "请输入群的幺元" << endl;
    char e;
    cin >> e;
    char outputform[7][7];
    char out1[6][6];
    outputform[0][0] = '*';
    for (int i = 1; i <= inputnum; i++)
    {
        outputform[0][i] = Y[i - 1];
        outputform[i][0] = Y[i - 1];
    }
    int m;
    for (int i = 0; i < inputnum; i++)
    {
        if (Y[i] == e)
        {
            m = i;
            break;
        }
    }
    int n = m;
    int r = m;
    for (int i = 0; i < inputnum; i++)
    {
        out1[n%inputnum][m] = Y[n%inputnum];
        n = n + 1;
    }
    int q;
    for (int i = 0; i < inputnum; i++)
    {
        q = 0;
        for (int y = 0; 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 = 1; i <= inputnum; i++)
    {
        for (int j = 1; j <= inputnum; j++)
        {
            outputform[i][j] = out1[i - 1][j - 1];
        }
    }
    for (int i = 0; i <= inputnum; i++)
    {
        for (int j = 0; 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 0;
}

  

 

经理 10:20:48
我不喜欢在别人写的东西写自己东西哈哈哈

经理 10:21:03
爬虫然后大数据其他不觉得啥了

. 10:21:09
python蓝桥杯都不分AB

管理员② 10:21:38
都不知道该怎么学

管理员 10:21:54
b站

. 10:21:58
@管理员② 你蓝桥杯考了吗

管理员 10:21:59
腾讯课堂

管理员 10:22:01
一堆

管理员② 10:22:02
群里那些大佬说什么完全不懂

. 10:22:06
中国大学Mook

. 10:22:23
@管理员 你是大几的

管理员 10:22:32
我啊

管理员 10:22:35
说来话长

. 10:22:36
还是工作了

管理员 10:22:45
/汪汪永保
16

管理员 10:22:53
无论何时何地16

. 10:22:57

管理员 10:23:04
明年我也是16

管理员 10:23:11
十年后照样16/汪汪

. 10:23:34
我还没到十八周岁

管理员 10:23:45
@. 没事

. 10:23:46
起立了

管理员 10:23:57
在群里多学习

管理员 10:24:00
不说了学习去了

管理员② 10:24:10
不说了学习去了

管理员 10:24:33
不说了学习去了

Envy

上一篇:搜索与图论(一):


下一篇:Oracle常用命令-基本命令