1:编写一个程序能够计算有限群G的子群H的左陪集
输入一个n阶有限群G的二元运算表及相关的子群,输出其左陪集。
(注意:按照表头元素顺序计算每个陪集,下图为G的二元运算表示例)
样例1:
输入:
6 2 (注:群的阶和子群阶)
M N P Q R S (注:此7*6阵列为群G的二元运算表红色部分内容)
N P M R S Q
P M N S Q R
M N P Q R S
S R Q P N M
Q S R M P N
R Q S N M P
P Q(注:子群H)
输出: (注:空格分隔,末尾字符也有空格)
P Q (注:这是原来的子群H)
M R (注:用M乘以H中的对应每个元素)
N S (注:用N乘以H中的对应每个元素)
样例2:
输入:
6 3
M N P Q R S
N P M R S Q
P M N S Q R
M N P Q R S
S R Q P N M
Q S R M P N
R Q S N M P
M N P
输出:
M N P
S R Q
参考代码(读入数据):
int ordG, ordH; (G和H的阶数)
char tableG[100][100];
char tablehead[100];
char H[100];
char ch;
int count;
cin>>ordG>>ordH;
for(int i=0;i<ordG+1;i++)
{
if(i==0)
{
count = 0;
ch = ' ';
while ( count < ordG && ch != EOF )
{
cin >> ch;
if ( ch != '\r' && ch != '\n' && ch != ' ' && ch != '\t' )
tablehead[count++] = ch;
}
}
else
{
count = 0;
ch = ' ';
while ( count < ordG && ch != EOF )
{
cin >> ch;
if ( ch != '\r' && ch != '\n' && ch != ' ' && ch != '\t' )
tableG[i-1][count++] = ch;
}
}
}
count = 0;
ch = ' ';
while ( count < ordH && ch != EOF )
{
cin >> ch;
if ( ch != '\r' && ch != '\n' && ch != ' ' && ch != '\t' )
H[count++] = ch;
}
#include <iostream>
#include <vector>
using namespace std;
bool Compare(vector<char> v1,vector<char> v2)
{
int i,j,t=0;
int s1=v1.size(),s2=v2.size();
for(i=0;i<s2;i++)
{
for(j=0;j<s1;j++)
{
if(v2[i] == v1[j])
{
t++;
}
}
}
if(t==s1)
{
return 1;
}
else
{
return 0;
}
}
bool Check(vector<vector<char> > v1, vector<char> v2)
{
int i,s1=v1.size();
for(i=0;i<s1;i++)
{
if(Compare(v1[i],v2))
{
return 1;
}
}
return 0;
}
int main()
{
int i,j;
int l1,l2;
cin>>l1>>l2;
char** a = new char* [l1+1];
for(i=0;i<l1+1;i++)
{
*(a+i) = new char[l1];
}
for(i=0;i<l1+1;i++)
{
for(j=0;j<l1;j++)
{
cin>>a[i][j];
}
}
char* b = new char[l2];
for(i=0;i<l2;i++)
{
cin>>b[i];
}
int* t = new int [l2];
for(i=0;i<l2;i++)
{
for(j=0;j<l1;j++)
{
if(b[i]==a[0][j])
{
t[i]=j;
break;
}
}
}
vector<vector<char> > result;
vector<char> c;
for(i=0;i<l2;i++)
{
c.push_back(a[0][t[i]]);
}
result.push_back(c);
c.clear();
for(i=1;i<l1+1;i++)
{
for(j=0;j<l2;j++)
{
c.push_back(a[i][t[j]]);
}
if(Check(result,c))
{
c.clear();
continue;
}
else
{
result.push_back(c);
c.clear();
}
}
for(i=0;i<result.size();i++)
{
for(j=0;j<result[i].size();j++)
{
cout<<result[i][j]<<" ";
}
cout << endl;
}
return 0;
}