牛客_n个圆环旋转问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangvalue/article/details/88561413

问题描述:

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

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

现在输入三组值:

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

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

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

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

3

123

321

输出为 4

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

4

0792

9470

输出为 8

分析:因为圆环可以正向旋转从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(i<n){
                    //前n个输入放入到currentString中
                    currentString=currentString+sc.nextInt();
                }else{
                    rightString=rightString+sc.nextInt();
                }
            }
            //将输入的两个String类型转为char 数组
            char[] current =currentString.toCharArray();
            char[] right=rightString.toCharArray();
            //遍历current和right数组取出对应的位置
            //a和b进行比较,如果|a-b|>5就用10-|a-b|,最后累加起来,作为最小的操作次数
            for(int i=0;i<right.length;i++){
                //分别取到两个数组中的各个元素
                int a = Integer.valueOf(current[i]).intValue();
                int b = Integer.valueOf(right[i]).intValue();
                //两个数之间的举例
               int gab= Math.abs(a-b);
               if(gab>5){
                   gab=10-gab;
               }
               sum+=gab;
            }
            for(int j=0;j<n;j++){

            }
            System.out.println("圆环的个数:"+n);
            System.out.println("输入的圆环当前转态码:"+currentString);
            System.out.println("输入的圆环解锁的态码:"+rightString);
            System.out.println("最小的移动次数:"+sum);
        }
        }

猜你喜欢

转载自blog.csdn.net/zhangvalue/article/details/88561413