有一个三维密码锁,每一维是 ( 1, n ) 之间的一个数,现在有两个预设密码,求在所有的可能组合而成的密码中,有多少每一维上的数字与两个预设密码中的任意一个相差 2 ,注意密码锁是环形,即 n 后面是 1。
暴力模拟
#include <cstdio>
#include <cmath>
using namespace std;
int n, a, b, c, d, e, f;
void init()
{
scanf("%d%d%d%d%d%d%d", &n, &a, &b, &c, &d, &e, &f);
}
void doit()
{
int ans = 0;
for(int i = 1; i <= n; i ++)
for(int j = 1; j <= n; j ++)
for(int k = 1; k <= n; k ++){
bool ok = 0;
if(abs(i - a) <= 2 || n - abs(i - a) <= 2){
if(abs(j - b) <= 2 || n - abs(j - b) <= 2)
if(abs(k - c) <= 2 || n - abs(k - c) <= 2) ans ++, ok = 1;//, printf("%d %d %d 1\n", i, j, k);
}
if(!ok) if(abs(i - d) <= 2 || n - abs(i - d) <= 2){
if(abs(j - e) <= 2 || n - abs(j - e) <= 2)
if(abs(k - f) <= 2 || n - abs(k - f) <= 2) ans ++;//, printf("%d %d %d 2\n", i, j, k);
}
}
printf("%d\n", ans);
}
int main()
{
freopen("combo.in", "r", stdin);
freopen("combo.out", "w", stdout);
init(); doit();
return 0;
}