//思想就是在将数组下标n-->i的小标元素进行翻转,然后再循环移动i位,然后将数组中元素输出
#include <iostream>
#include<cmath>
using namespace std;
//下标从1开始用
#define MAX 10000
int data[MAX];
int n;
static int c=1;
void init(int num)
{
for(int i=1;i<=num;i++)
{
data[i]=num-i+1;//注意赋值的顺序,初始化的时候是逆序
}
}
int f(int n)
{
if(n==0||n==1)
return 1;
else
return n*f(n-1);
}
void Print(int num)
{
cout<<c++<<": ";
for(int s=num;s>=1;s--)
{
cout<<data[s]<<" ";
}
cout<<endl;
}
void Scroll(int num)//传入的是i,实现的是将n--i翻转过来,
{
while(count--)//然后循环输出i位
{
int temp = data[n];
for(int j=n-1;j>=1;j--)
{
data[j+1]=data[j];
}
data[1]=temp;
}
Print(n);
}
int main()
{
cin>>n;
init(n);
Print(n);
while(1)
{
for(int i=n;i>=1;i--)//从最右开始检测,发现P[I]!=I就翻转和循环移动
{
if(data[i]!=i)
{
Scroll(i);
break;
}
}
if(c==(f(n)+1))
break;
}
return 0;
}
#include <iostream>
#include<cmath>
using namespace std;
//下标从1开始用
#define MAX 10000
int data[MAX];
int n;
static int c=1;
void init(int num)
{
for(int i=1;i<=num;i++)
{
data[i]=num-i+1;//注意赋值的顺序,初始化的时候是逆序
}
}
int f(int n)
{
if(n==0||n==1)
return 1;
else
return n*f(n-1);
}
void Print(int num)
{
cout<<c++<<": ";
for(int s=num;s>=1;s--)
{
cout<<data[s]<<" ";
}
cout<<endl;
}
void Scroll(int num)//传入的是i,实现的是将n--i翻转过来,
{
/*
此段代码已经和谐,十一后补上---
和谐******和谐*******和谐********和谐********
*/
while(count--)//然后循环输出i位
{
int temp = data[n];
for(int j=n-1;j>=1;j--)
{
data[j+1]=data[j];
}
data[1]=temp;
}
Print(n);
}
int main()
{
cin>>n;
init(n);
Print(n);
while(1)
{
for(int i=n;i>=1;i--)//从最右开始检测,发现P[I]!=I就翻转和循环移动
{
if(data[i]!=i)
{
Scroll(i);
break;
}
}
if(c==(f(n)+1))
break;
}
return 0;
}
23万+





