A1064. 排名计算

#include <iostream>

using namespace std;
int a[6];
void cri()
{
    int  flag=1;
    if(a[5]==2||a[5]==3)
        flag=0;
    if(a[1]<3&&a[5]!=1)
        flag=0;
    else if(a[1]>=3&&a[5]==1)
        flag=0;
    if(a[2]<3&&a[2]!=2)
        flag=0;
    else if(a[2]>=3&&a[2]==2)
        flag=0;
    if(a[3]<3&&a[1]!=5)
        flag=0;
    else if(a[3]>=3&&a[1]==5)
        flag=0;
    if(a[4]<3)
    {
        if(a[3]==1)
            flag=0;
    }
    else if(a[4]>=3&& a[3]!=1)
        flag=0;
    if(a[5]<3)
    {
        if(a[4]!=1)
            flag=0;
    }
    else if(a[5]>=3&&a[4]==1)
        flag=0;
    if(flag==1)
        for(int i=1; i<=5; i++)
            cout<<a[i]<<" ";
}
void all(int k)
{
    for(int i=1; i<6; i++)
    {

        a[k]=i;
        if(k<5)
            all(k+1);
        else
        {
            int flag=1;
            for(int m=1;m<=5;m++)
            {
                for(int n=1;n<=5;n++)
                {
                    if(m!=n)
                    if(a[m]==a[n])
                        flag=0;
                }
            }

            if(flag==1)
            {
                cri();
    /*             for(int u=1;u<=5;u++)
                    cout<<a[u]<<" ";
                 cout<<endl;
                 */
            }


        }

    }

}
int main()
{
    all(1);

    return 0;
}

  题目:http://www.tsinsen.com/A1063

可以自己用笔做,也可以代码做。

用笔快,但是可能不给分。

代码主要思路就是求全排列,然后一个个的试。

函数all是求全排列,这里我做的偷懒,直接求组合了然后再筛选。也就是我先求的11111~55555,在筛除重复的。

cri是筛选。

把我的注释显示出来会打印出全排列。cout外面的/*.

本博客专注于错误锦集,在作死的边缘试探
原文地址:https://www.cnblogs.com/SweetBeens/p/6420702.html