【开篇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])
{