- 例一:
- /*数字数码管
- 数字或字母可以用7位数码管显示(就是排列为8字形的7个数码管)
- @@@@ 0
- @ @ 1 2
- @ @ 3
- @@@@ 4 5
- @ @ 6
- @ @
- @@@@
- 对于大型灯管,为了节约使用,在切换数字的时候,如果该灯管的状态没有改变,则不需要对该灯管关了再开。
- 已知一个数字变化的系列,求7个数码管开关的动作。
- 3:0,2,3,5,6
- 6:0,1,4,6,5,3
- */
- /*
- 数字 所用到的数码管
- 0 014652
- 1 14或者25
- 2 02346
- 3:0,2,3,5,6
- 4 1325
- 5 01356
- 6:0,1,4,6,5,3
- 7 025
- 8 0123456
- 9 012356
- */
- public class Homework6 {
- public static void main(String[] args) {
- int d[] = {0,0,0,0,0,0,0};//用来记录7个数码管的开关状态,0表示关,1表示开
- int arr[][] = {{1,1,1,0,1,1,1},//用来记录0到9这些数字用数码管表示时,数码管的开关状态,一行为一个数字
- {0,1,0,0,1,0,0},
- {1,0,1,1,1,0,1},
- {1,0,1,1,0,1,1},
- {0,1,1,1,0,1,0},
- {1,1,0,1,0,1,1},
- {1,1,0,1,1,1,1},
- {1,0,1,0,0,1,0},
- {1,1,1,1,1,1,1},
- {1,1,1,1,0,1,1}};
- String numbers;//用来存储数字变化的系列
- System.out.print("请输入要变化的数字序列:\t");
- Scanner scan = new Scanner(System.in);
- numbers = scan.next();
- /* 在切换数字的时候,如果该灯管的状态没有改变,则不需要对该灯管关了再开。
- * 原来数码管为开1 现在为1 状态不变
- * 1 0 变为现在状态0
- * 0 1 变为现在状态1
- * 0 0 状态不变
- * 也就是状态相等,不变;状态不等,变为现在状态*/
- for(int i = 1; i < numbers.length(); ++i)
- {
- int pre = Integer.parseInt(String.valueOf(numbers.charAt(i-1)));//取出字符串中变化前的数
- int curr = Integer.parseInt(String.valueOf(numbers.charAt(i)));//取出字符串中要变化成的数
- System.out.println("从" + pre + "转化到" + curr + "灯管的开关状态变化");
- for(int k = 0; k < 7; ++k)//遍历灯管状态
- {
- if (arr[pre][k] == arr[curr][k])//变化前的数 与 变化成的数 的第k个灯管 的状态相同
- System.out.print(k + "号灯管状态不变\t");
- else {
- d[k] = arr[curr][k];//变化前的数 与 变化成的数 的第k个灯管 的状态不同,并变为现在状态
- System.out.print(k + "号灯管状态变为:" + d[k] + "\t");
- }
- }
- System.out.println();
- }
- }
- }
例二:
- /*隐藏密码
- 密码备忘扰乱法
- 我们的密码如果很长很复杂,容易忘记。如果太简单,不安全。 把密码记录在本子上,更容易泄密!
- 有人想了这么个办法,把密码嵌入一堆随机的数字中。
- 因为每个人对密码完全记住困难,但从一些线索中回忆出来就很容易。
- 密码:75383
- 3 5 6 4 7 2 8 6
- 5 4 7 2 7 0 7 4
- 1 6 5 9 5 8 0 3
- 1 6 7 0 3 6 8 9
- 3 6 4 7 8 0 9 4
- 3 4 6 9 3 6 8 9
- 2 1 3 6 7 8 1 3
- 2 7 3 9 4 6 3 5
- 嵌入时,可以横向或纵向。如果再复杂点,可以设计对角线。*/
- public class Homework7 {
- public static void main(String[] args) {
- int row = 8, clum = 8;//二维数组行数和列数
- int array[][] = new int [row][clum];//二维数组存储随机数和密码
- int code[] = {7,5,3,8,3};
- //为二维数组产生随机数
- for(int i = 0; i < row; ++i)
- for(int j = 0; j < clum; ++j)
- array[i][j] = (int) (Math.random()*10);
- //嵌入密码
- //insertCode2(code, array, row, clum);//嵌入到纵向
- insertCode1(code, array, row, clum);//嵌入到对角线上
- //输出二维数组
- for(int i = 0; i < row; ++i){
- for(int j = 0; j < clum; ++j){
- System.out.print(array[i][j] + " ");
- }
- System.out.println();
- }
- }
- //嵌入到对角线上
- private static void insertCode1(int code[], int array[][], int row, int clum)
- {
- for(int i = 0, j = 1; i < code.length && j < row; ++i, ++j )
- array[j][j] = code[i];
- }
- //嵌入到纵向
- private static void insertCode2(int code[], int array[][], int row, int clum)
- {
- for(int i = 0, j = 1; i < code.length && j < row; ++i, ++j )
- array[j][4] = code[i];//第四列
- }
- //嵌入到横向
- private static void insertCode3(int code[], int array[][], int row, int clum)
- {
- for(int i = 0, j = 1; i < code.length && j < row; ++i, ++j )
- array[4][j] = code[i];//第四行
- }
- }