杭电1027

来源:互联网 发布:网络主播工资表 编辑:程序博客网 时间:2024/06/16 07:49

大致思路:全排列计数,全排列问题可以参考:全排列问题

code:

#include <iostream>#include <string.h>#include <stdio.h>#define MAX2 1005using namespace std;int num;int array[MAX2];void swap(int *array,int i,int j){    int t;    t=array[i];    array[i]=array[j];    array[j]=t;}void transverse(int array[],int m,int n){    while(m!=n)    {        swap(array,m,n);        if(m+1==n)            break;        m++;        n--;    }}void reorder(int array[],int m,int num,int n){    int i,j;    while(true)    {        for(i=m-1;i>=1;--i)        {            if(array[i]<array[i+1])                break;        }        if(i==0)        {            break;        }        for(j=m;j>i;j--)            if(array[j]>array[i])            {             break;            }        swap(array,i,j);        transverse(array,i+1,m);        num++;        if(num==n)            break;    }}int main(){    int n,m;    int i;    while(scanf("%d%d",&n,&m)!=-1)    {        memset(array,0,sizeof(array));        num=1;        for(i=1;i<=n;i++)        {            array[i]=i;        }        if(n>1)        {            if(m!=1)            {                 reorder(array,n,num,m);            }            for(i=1;i<=n-1;i++)                {                    cout<<array[i]<<' ';                }                    cout<<array[n]<<endl;        }        else        {            cout<<array[1]<<endl;        }    }    return 0;}


0 0
原创粉丝点击