您的位置:首页 > 其它

算法基础——1.6练习

2014-04-29 17:00 176 查看
[java] view
plaincopy





例一:

[java] view
plaincopy





/*数字数码管

数字或字母可以用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();

}

}

}

例二:

[java] view
plaincopy





/*隐藏密码

密码备忘扰乱法

我们的密码如果很长很复杂,容易忘记。如果太简单,不安全。 把密码记录在本子上,更容易泄密!

有人想了这么个办法,把密码嵌入一堆随机的数字中。

因为每个人对密码完全记住困难,但从一些线索中回忆出来就很容易。

密码: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];//第四行

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: