【题目来源】:计算器
【题目描述】:
题目描述
王小二的计算器上面的LED显示屏坏掉了,于是他找到了在计算器维修与应用系学习的你来为他修计算器。
为了排除电路故障,现在你需要计算,将数字A变为数字B需要经过多少次变换?
注意:现在将其中每段小二极管的开和关都定义为一次变换。例如数字1变为2是5次操作。
【数据范围】
L< =100
屏幕上可以显示0~9的数字,其中每个数字由7个小二极管组成,各个数字对应的表示方式如图所示:
为了排除电路故障,现在你需要计算,将数字A变为数字B需要经过多少次变换?
注意:现在将其中每段小二极管的开和关都定义为一次变换。例如数字1变为2是5次操作。
【数据范围】
L< =100
输入
第一行为一个正整数L,表示数码的长度。
接下来两行是两个长度为L的数字A和B,表示要把数字A变成数字B(数字可以以0开头)。
接下来两行是两个长度为L的数字A和B,表示要把数字A变成数字B(数字可以以0开头)。
输出
一行一个整数,表示这些小二极管一共要变换多少次。
样例输入
3 101 025
样例输出
12
【解析】:将0-9每个数字分成七部分,将两个数字不同的部分找出来即为改变的次数
【代码】:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String a[] = new String[100];
/** 将0-9数字存入数组a中,其中有红线的部分为1没有的部分为0 */
a[0] = "1111110";
a[1] = "0010010";
a[2] = "0111101";
a[3] = "0110111";
a[4] = "1010011";
a[5] = "1100111";
a[6] = "1101111";
a[7] = "0110010";
a[8] = "1111111";
a[9] = "1110111";
int l = sc.nextInt();
String b = sc.next();
String c = sc.next();
int bb[] = new int[l + 10];
int cc[] = new int[l + 10];
/** 将输入的字符串转化成数字 */
for (int i = 0; i < l; i++) {
bb[i] = b.charAt(i) - '0';
cc[i] = c.charAt(i) - '0';
}
/** 求出需要变换的次数 */
int sum = 0;
for (int i = 0; i < l; i++)
for (int k = 0; k < 7; k++)
if (a[bb[i]].charAt(k) != a[cc[i]].charAt(k))// 比较两个数字所在的位置有几个不同的红线标记
sum++;
System.out.println(sum);
}
}