#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外面的/*.