admin管理员组

文章数量:1516870

【离散数学

【开篇bb】
我又来码作业了,现在已经第八周了,为什么2-7周没有码作业呢?因为我没有好好学习,作业都没好好做而且掐着ddl做作业哪有时间整理博客呢(虽然现在还在卡ddl,太顶了呜呜呜)
这次主要是两道置换群的编程题,两道题编了仨小时,也算是很努力了叭QAQ
//

置换的轮换表示

题目:

输入:
置换后的序列
输出:
不相杂的轮换乘积,每行表示一个轮换(轮换的起始数字最小,每个轮换的起始数字递增排序,单轮换省略)
例如:
样例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 (空格分隔)

因为我还在赶ddl,就先不分析啦,反正代码注释也写得挺明白的嘿嘿

#include <stdio.h>
#include <string.h>
main()
{char c[50];gets(c); int n=(strlen(c)+1)/2;int i,j=0,k,flag=1,a[25],b[25];for(i=0;i<n;i++){a[i]=c[2*i]-48;b[i]=0;}int l=1;b[j]=l; printf("%d ",b[j]); j++;for(i=0;j<n;){if(a[i]==l) //a[i]等于这一轮换的头,说明轮换结束 {printf("\n"); //找下一个轮换的头 l++; while(flag==1){for(k=0;k<j;k++){ //l不能已经在之前的轮换中 if(l==b[k]) break;}if(k==j) //l不在轮换里 {if(l==a[l-1]){

本文标签: 离散数学