本文主要是介绍【离散数学】置换群的轮换表示,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目
给出一个置换,写出该置换的轮换表示。比如
表示为(1 3 6 7 8 4 2)(5 9)
输入:
置换后的序列
输出:
不相杂的轮换乘积,每行表示一个轮换(轮换的起始数字最小,每个轮换的起始数字递增排序,单轮换省略)
例如:
样例1:
输入:(空格分隔)
3 1 6 2 9 7 8 4 5
输出:
1 3 6 7 8 4 2(空格分隔)
5 9(空格分隔)
样例2:
输入:(空格分隔)
4 6 7 5 1 2 3
输出:
1 4 5(空格分隔)
2 6(空格分隔)
3 7 (空格分隔)
编程语言: | C and C++ (VC6, xp32) 42521 |
内存最多可用: | 64MB |
CPU使用时间上限: | 1 秒 |
代码示例
#include<stdio.h>
#include<string.h> int main()
{int j,i,k=0,num=1;int a[10];char str[20];gets(str);int totallength = strlen(str);int count = (totallength+1)/2;for (i=0; i<count; i++){a[i] = str[2*i] -48;}// while(1)
// {
// scanf("%d",&a[count]);
// count++;
// if(getchar() == '\n')
// {
// break;
// }
// }//(使用此方法输入时会降低运行效率,故改为输入字符串的形式来提高运行速度)i=0;printf("1 ");int b[10]={0};while(k<count-1){printf("%d ",a[i]);b[i]=1;k++;i=a[i]-1;if(a[i]==num){b[i]=1;k++;for(j=0;j<count-1;j++){if(b[j]==0){i=j;num=j+1;if(num!=a[i])printf("\n%d ",num);break;}}}}return 0;
}
总结
欢迎大家批评指正
这篇关于【离散数学】置换群的轮换表示的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!