📄 ordinal.c
字号:
/*序数法生成全排列*/
void ordinal(int n);
main ()
{
int n;
printf("please input n:"); /*n为数的个数*/
scanf("%d",&n);
printf("\n");
ordinal(n);
getch();
exit(0);
}
void ordinal(int n)
{
int i,j,k,t,a[100],b[100],p[100];
printf("please input %d arrange:",n);
for (i=1;i<=n;i++) /**************/
{ /*输入序列*/
scanf("%d",&p[i]); /***************/
}
clrscr();
printf("\nThe primary arrange is:");
for (i=1;i<=n;i++) /***********************/
{
printf("%d ",p[i]); /*打印出初始的序列*/
}
/************************/
for (i=1;i<=n-1;i++)
{
t=0; /****************/
for (k=i+1;k<=n;k++)
{ /*计算序数*/
if (p[i]>p[k])
t++; /******************/
}
if ((p[i]-1)>0)
a[p[i]-1]=t;
}
j=1;
while (1)
{
a[j]=a[j]+1; /*********************/
if (a[j]>j) /*计算下一个序列的序数*/
{ /************************/
a[j]=0;
j++;
}
else
break;
}
for (i=1;i<=n;i++)
{
b[i]=p[i];
}
for (i=1;i<=n-1;i++)
{ /***************/
for (j=i+1;j<=n;j++) /*用冒泡法对输入的数据进行排序*/
{ /**********************/
if (b[i]>b[j])
{
t=b[i];
b[i]=b[j];
b[j]=t;
}
}
}
for (i=1;i<=n;i++) /***********************/
{ /*序列清0*/
p[i]=0; /**********************/
}
for (i=n-1;i>=1;i--)
{
k=0; /**k用来记录从右边有多少个空格*/
for (j=n;j>=1;j--)
{
if ((p[j]==0))
{
if ((a[i]==k)) /*如果空格数等于a[i]*/
{
p[j]=b[i+1];
break;
}
else
k++;
}
}
}
for (i=n;i>=1;i--)
{
if (p[i]==0) /*将b[1]插入到空的位置*/
p[i]=b[1];
}
printf("\nThe next arrange is:");
for (i=1;i<=n;i++) /***********************/
{
printf("%d ",p[i]); /*打印出下一个序列*/
}
/******************/
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -