每日一练习——密码锁

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;
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值