Description(原版)
Scrooge McDuck keeps his most treasured savings in a home safe with a combination lock.
Each time he wants to put there the treasures that he's earned fair and square, he has to open the lock.
The combination lock is represented by n rotating disks with digits from 0 to 9 written on them.
Scrooge McDuck has to turn some disks so that the combination of digits on the disks forms a secret combination.
In one move, he can rotate one disk one digit forwards or backwards.
In particular, in one move he can go from digit 0 to digit 9 and vice versa.
What minimum number of actions does he need for that?
Description(人话版)
某男把他最宝贵的积蓄放在一个装有密码锁的家中保险箱里。
每次他想把他堂堂正正赚来的宝贝们放进盒子里,他就必须打开锁。
密码锁由n个旋转的盘表示,盘上写着0到9的数字。
某男不得不转动一些圆盘,让圆盘上的数字组合形成一个神秘数字。
在一次移动中,他可以将一个圆盘向前或向后旋转一个数字。
特别地,他可以一步从0到9,反之亦然。
他需要的最小行动数是多少?
Input
The first line contains a single integer n (1 ≤ n ≤ 1000) — the number of disks on the combination lock.
The second line contains a string of n digits — the original state of the disks.
The third line contains a string of n digits — Scrooge McDuck's combination that opens the lock.
输入的第一个参数:一个整数(1~1000)代表圆盘的数量
输入的第二个参数:一开始各圆盘组成的并不神秘的数字
输入的第三个参数:某男需要转到的神秘数字
Output
Print a single integer — the minimum number of moves Scrooge McDuck needs to open the lock.
Sample Input
> Input
5
82195
64723
> Output
13
package EveryDayPracticeC;
import java.util.Scanner;
public class CTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
String start = scanner.next();
String end = scanner.next();
int res = solution(n, start, end);
System.out.println(res);
}
/**
* 每次移动距离的最小值相加就是最小移动距离
* @param n
* @param start
* @param end
* @return
*/
public static int solution(int n, String start, String end){
int count = 0;
char[] starts = start.toCharArray();
char[] ends = end.toCharArray();
for(int i = 0; i < n; i++){
count += minMove(starts[i], ends[i]);
}
return count;
}
/**
* 获取移动距离的最小值
* @param start
* @param end
* @return
*/
public static int minMove(int start, int end){
int rel1 = Math.abs(start - end);
int rel2 = 10 - rel1;
int min = Math.min(rel1, rel2);
return min;
}
}