第十一届蓝桥杯省赛第二场------试题 D: 七段码
试题 D: 七段码(难度:★★★)10分
【问题描述】 小蓝要用七段码数码管来表示一种特殊的文字。 上图给出了七段码数码管的一个图示,数码管中一共有 7 段可以发光的二极管,分别标记为 a, b, c, d, e, f, g。 小蓝要选择一部分二极管(至少要有一个)发光来表达字符。在设计字符的表达时,要求所有发光的二极管是连成一片的。 例如:b 发光,其他二极管不发光可以用来表达一种字符。 例如:c 发光,其他二极管不发光可以用来表达一种字符。 这种方案与上 一行的方案可以用来表示不同的字符,尽管看上去比较相似。 例如:a, b, c,d, e 发光,f, g 不发光可以用来表达一种字符。 例如:b, f 发光,其他二极管不发光则不能用来表达一种字符,因为发光的二极管没有连成一片。 请问,小蓝可以用七段码数码管表达多少种不同的字符? 【答案提交】 这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一 个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。
思路:
若没有后续条件,只求得七段码数码管能够表示的字符,把七段码a,b,c,d,e,f,g发光记做1,不发光记做0。则共有(2^7-1)种可能性,即共可以表达127中字符。加上后续条件,只需要枚举这127中字符,挨个看是否连通即可。
代码:
枚举127中类型如下,一 一对照即可。 1、输出枚举的127中0,1表示的数字
public class Text {
public static void main(String[] args) {
int a[] = new int[128];
for(int i = 1;i<128;i++) {
a[i] = Integer.parseInt(Integer.toBinaryString(i));
// 首先将十进制转换为二进制,因为Integer.toBinaryString()函数返回的是String类型
// 所以再用Integer.parseInt()函数转换成十进制(或者说是转换成int类型)重新存储进数组
}
for(int i = 0;i<128;i++) {
System.out.printf("%07d",a[i]);
// 利用整形宽度,输出七位代表状态码的数字
System.out.println();
}
}
}
2、将上述输出的0,1作为输入内容,输出替换成字母的结果进行一一对比。
import java.util.Scanner;
public class T {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
char c[] = {
a,b,c,d,e,f,g};
String a[] = new String[128];
for(int i = 1;i<128;i++) {
a[i] = sc.nextLine();
}
for(int i = 1;i<128;i++) {
for(int j = 0;j<a[i].length();j++) {
if(a[i].charAt(j)==1) {
System.out.print(c[j]);
}
}
System.out.println();
}
}
}
