####Combination Lock####
简述:
两个密码,旋转的密码盘,给出密码盘的最大刻度,以及两个密码。在旋转盘的过程中,每个密码相差两位之内都可以算作正确。
本来按照密码,计算正确密码就好了,不过我用的是算错误密码,然后用所有的密码减去就好了,不过要注意,如果刻度盘刻度较少不足5个的时候,需要额外考虑,此种特殊情况。
代码:
#include <stdio.h>
#include <string.h>
#include <math.h>
int lock[2][3];
int n;
int rid();
int main(void)
{
freopen("combo.in", "r", stdin);
freopen("combo.out", "w", stdout);
int i, j, sum = 250;
scanf("%d", &n);
//若给出的刻度范围不及5;
if(n < 5)sum = 2 * n * n * n;
for(i = 0; i < 2; i++)
for(j = 0; j < 3; j++)
scanf("%d", &lock[i][j]);
sum -= rid();
printf("%d\n", sum);
return 0;
}
int rid()
{
int j;
int c[3], sum = 0;
memset(c, 0, sizeof(c));
for(j = 0; j < 3; j++)
{
int a;
a = lock[0][j] > lock [1][j] ? lock[0][j] - lock [1][j] : lock[1][j] - lock [0][j];
if(a > n / 2)
c[j] = n - a;
else
c[j] = a;
if(c[j] >= 5)
c[j] = 0;
else
{
//若给出的刻度范围不及5;
if(n < 5)
c[j] = n;
else
c[j] = 5 - c[j];
}
}
for(j = 1, sum = c[0]; j < 3; j++)
sum *= c[j];
return sum;
}