由于容错性,当N<=5时,所有的数字组合均可以开锁。当N>5时,比较理想的情况是,两组标准密码分的比较开,不会出现同一组密码可以看成两种标准密码的容错密码。那么显然可以开锁的密码总数是2*5*5*5=250;那么只要找出会有多少组密码会重复出现在两种标准密码为基础的容错密码内即可。所以:设标准密码一为(a1,b1,c1),第二种标准密码为(a2,b2,c2);如果|b1-a1|<5 or |b1-a1|>N-5即会出现重复(此处只写了a1和b1,实际上必须三个都重复了才能算重复!)。
代码
#include<stdio.h>
int abs(int k)
{
if(k<0)
k=-k;
return k;
}
int N;
int a[4],b[4];
int main()
{
int i,p1=0,p2=0,p3=0,t;
scanf("%d",&N);
for(i=1;i<4;i++)
scanf("%d",&a[i]);
for(i=1;i<4;i++)
scanf("%d",&b[i]);
if(N>5)
{
if(abs(b[1]-a[1])<5||abs(b[1]-a[1])>N-5)
if(abs(b[2]-a[2])<5||abs(b[2]-a[2])>N-5)
if(abs(b[3]-a[3])<5||abs(b[3]-a[3])>N-5)
{
if(abs(b[1]-a[1])<5)
p1=5-abs(b[1]-a[1]);
if(abs(b[1]-a[1])>N-5)
p1=abs(b[1]-a[1])-(N-5);
if(abs(b[2]-a[2])<5)
p2=5-abs(b[2]-a[2]);
if(abs(b[2]-a[2])>N-5)
p2=abs(b[2]-a[2])-(N-5);
if(abs(b[3]-a[3])<5)
p3=5-abs(b[3]-a[3]);
if(abs(b[3]-a[3])>N-5)
p3=abs(b[3]-a[3])-(N-5);
}
printf("%d\n",250-p1*p2*p3);
}
if(N<=5)
printf("%d\n",N*N*N);
return 0;
}