1 开箱
Time Limit:1000MS Memory Limit:65535K
题型: 编程题 语言: 不限定
描述:
邀请大家一起玩游戏。我们准备了一个盒子,里面有很多游戏。
所有这些游戏都是为非凡的玩家设计的,所以我们锁定了盒子以防止不合格人们无法访问它。
现在,你需要做的第一件事就是打开箱子。这是一个4位密码锁,每个数字可以是0到9之间的任何数字。在每次移动中,您可以将每个数字更改为其相邻的数,例如,如果当前数字是2,则可以将其更改为1或3。具体而言,如果当前数字是0,您可以将其更改为1或9,如果当前数字是9,您可以更改为0或8。
正确的密码是9394,但每个锁的初始状态不同。给定初始值状态,请输出解锁最少需要多少步骤。
输入格式:
第一行是整数T(T<=10000),表示测试用例的数量。
然后是n行。每行包含一个整数,表示锁的初始4位数设置。
输出格式:
对于每个测试用例,输出解锁需要的最少步骤数。
输入样例:
3
0000
9999
1170
输出样例:
9
9
10
//转动密码锁
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int t = 10000 ;
// 1 10 10 10
int password[31]= {0,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9,0,1,2,3,4,5,6,7,8,9};
int judge(int x,int last){
int flag;
for(int i=11 ; i<=20 ; i++){
if(x==password[i]){
flag = i ;
}
}
int sum1=0;
int sum2=0;
//向右边递归
for(int i=flag;i<=30;i++){
if(last == password[i]){
break;
}
sum1++;
}
//向左递归
for(int i=flag;i>=0;i--){
if(last == password[i]){
break;
}
sum2++;
}
return min(sum1,sum2);
}
int main()
{
int n;
scanf("%d",&n);
int a ;
int a1,a2,a3,a4;
int sum1,sum2,sum3,sum4;
while( n>=1 && scanf("%d",&a)!= EOF)
{
sum1=0;
sum2=0;
sum3=0;
sum4=0;
n--;
a1=a/1000;
a2=a/100 % 10;
a3=a/10 % 10;
a4=a% 10;
sum1=judge(a1,9);
sum2=judge(a2,3);
sum3=judge(a3,9);
sum4=judge(a4,4);
printf("%d\n",sum1+sum2+sum3+sum4);
}
return 0;
}