⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ordinal.c

📁 这是一个用Turboc2.0开发的程序
💻 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 + -