牛客_n个圆环旋转问题

问题描述:

有n个圆环相邻,其中每一个圆环上都是0-9的数字,每个圆环都可按照0-9转动,也可以按照9-0的方向转动

现在需要手动转动这个圆环,开启密码,问最少需要转动圆环多少次

现在输入三组值:

第一行:n 表示圆环的个数

第二行:长度为n的圆环当前状态码

第三行:   长度为n的圆环开锁密码状态码

 

例一(表示一共有3个圆环,当前圆环状态码为123,圆环开启密码状态码321)

3

123

321

输出为 4

例二(表示一共有4个圆环,当前圆环状态码为0792,圆环开启密码状态码9470)

4

0792

9470

输出为 8

牛客_n个圆环旋转问题_第1张图片

分析:因为圆环可以正向旋转从0-9,也可以反方向旋转9-0,所以圆环上从一个状态码到另外一个状态码最远的距离就是5

不会超过5,比如从0状态到9状态,只需要逆序旋转一次即可,所以在对当前状态码进行和密码状态码旋转的时候,分开进行每个圆环对应的状态进行比较,只要相应的值之差的绝对值超过5就用10-绝对值,就是真正最少旋转的值了。

比如上面的例子从0792状态到9470状态,第一个环从0到9需要逆序转1次,第二个环需要逆向方向转3次,第三个环需要逆向转2次

第四个环从2到0需要逆序转2次,最终就是  1+3+2+2=8次

/**
 * @ Author zhangsf
 * @CreateTime 2019/3/14 - 8:40 PM
 */
package com.bjut.practice;

import java.util.Scanner;

public class Loop {
        public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            //sum作为统计最终的最少的操作次数
            int sum=0;
            //第一个数表示输入的圆环的个数
            int n = sc.nextInt();
            String currentString="";
            String rightString="";
            //完成输入的准备工作
            for(int i = 0; i < 2*n; i++){
                if(i5就用10-|a-b|,最后累加起来,作为最小的操作次数
            for(int i=0;i5){
                   gab=10-gab;
               }
               sum+=gab;
            }
            for(int j=0;j

牛客_n个圆环旋转问题_第2张图片

你可能感兴趣的:(牛客&Leetcode)