又是一个全排列哈,
注意注意,这个题不是十三个数字都需要,但原理是一样的
一开始把for的边界写错了(每次其实应该从k开始,还没看出来orz)
#include <iostream> #include <string> #include <string.h> #include <vector> #include <time.h> #include <algorithm> //全排列,但需要剪枝 using namespace std; int a[]={0,1,2,3,4,5,6,7,8,9,10,11,12,13}; int ans=0; int check(){ if((a[1]+a[2]==a[3])&&(a[4]-a[5]==a[6])&&(a[7]*a[8]==a[9])&& (a[10]%a[11]==0)&&(a[10]/a[11]==a[12])) return true; return false; } void f(int k){ if(k==14 ){ if(check()) { ans++; } } for (int i = k; i <= 13; ++i) { int t = a[i]; a[i] = a[k]; a[k] = t; if(k==3&&(a[1]+a[2]!=a[3])){//可以多剪几次枝 int t = a[i]; a[i] = a[k]; a[k] = t; continue; } f(k + 1); int q = a[i]; a[i] = a[k]; a[k] = q; } } int main(){ f(1); cout<<ans; }