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外面的/*.
本博客专注于错误锦集,在作死的边缘试探