算法基础——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];//第四行
}
}
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];//第四行
}
}
相关文章推荐
- 算法基础——1.6练习(数字数码管、隐藏密码问题)
- 算法-蓝桥杯-基础练习 数列特征(JAVA)
- 算法-蓝桥杯-基础练习 十六进制转十进制(JAVA)
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 【算法学习笔记】09.数据结构基础 二叉树初步练习2
- 算法基础——2.7练习(通信编码、格式检查问题)
- 算法基础——2.7练习
- 【基础练习】【二分图匹配】【匈牙利算法】codevs1022 覆盖题解
- 若干经典基础算法题目练习
- Java基础算法练习五题——(1)
- 从头开始学算法:考研机试题练习(C/C++)--基础知识
- 蓝桥杯-基础练习-大数算法
- C++基础算法练习之排序比较
- 算法-蓝桥杯-基础练习 特殊的数字 (JAVA)
- 算法-蓝桥杯-基础练习 十六进制转八进制(JAVA)
- 动态规划-背包的基础上进行模拟 2018年全国多校算法寒假训练营练习比赛(第二场)牛客网B题
- 蓝桥杯 基础练习 特殊回文数 高效算法
- Coursera_程序设计与算法_计算导论与C语言基础_数组应用练习
- 算法-蓝桥杯-基础练习 01字串
- 算法-蓝桥杯-基础练习 数列排序(JAVA)