第十一届蓝桥杯省赛第二场------试题 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();
		}
		
	}

}

答案:80

经验分享 程序员 微信小程序 职场和发展