作业

数字数码管

数字或字母能够用7位数码管显示(就是排列为8字形的7个数码管)

@@@@         0

    @          @       1   2

    @          @         3

       @@@@        4   5

    @          @         6

    @           @

       @@@@

对于大型灯管,为了节约使用,在切换数字的时候,假设该灯管的状态没有改变,则不须要对该灯管关了再开。

已知一个数字变化的系列,求7个数码管开关的动作。

3:0,2,3,5,6

6:0,1,4,6,5,3

以下的代码不过两个数字变化后,第几个灯管变化,题目要求数字变化系列。

另一个逻辑问题:全灭到第一个数没有实现亮灯号。

import java.util.Arrays;
import java.util.Scanner; /*数字数码管 数字或字母能够用7位数码管显示(就是排列为8字形的7个数码管) @@@@ 0
@ @ 1 2
@ @ 3
@@@@ 4 5
@ @ 6
@ @
@@@@ 对于大型灯管,为了节约使用,在切换数字的时候,假设该灯管的状态没有改变,则不须要对该灯管关了再开。
已知一个数字变化的系列,求7个数码管开关的动作。 3:0,2,3,5,6
6:0,1,4,6,5,3
*/
public class NumberLight {
public static void main(String[] args) { System.out.println("First Number:");
Scanner sc = new Scanner(System.in);
int first = sc.nextInt();
System.out.println("Second Number:");
int second = sc.nextInt(); System.out.print("要反向的开关号为:");
for(int i=0;i<7;i++){
if(showNumber(second)[i]!=showNumber(first)[i]){//推断这两个数之间那几个位置不同
System.out.print(i+" ");//打印出不同的地方
}
}
System.out.println();
System.out.println(Arrays.toString(showNumber(first)));
System.out.println(Arrays.toString(showNumber(second))); }
//数字数码管显示方法,參数为要显示的数字
public static int[] showNumber(int a){
int []n = {0,0,0,0,0,0,0};
switch (a) {
case 0:
n[0]=1;n[1]=1;n[2]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 1:
n[2]=1;n[5]=1;
break;
case 2:
n[0]=1;n[2]=1;n[3]=1;n[4]=1;n[6]=1;
break;
case 3:
n[0]=1;n[2]=1;n[3]=1;n[5]=1;n[6]=1;
break;
case 4:
n[1]=1;n[2]=1;n[3]=1;n[5]=1;
break;
case 5:
n[0]=1;n[1]=1;n[3]=1;n[5]=1;n[6]=1;
break;
case 6:
n[0]=1;n[1]=1;n[3]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 7:
n[0]=1;n[2]=1;n[5]=1;
break;
case 8:
n[0]=1;n[1]=1;n[2]=1;n[3]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 9:
n[0]=1;n[1]=1;n[2]=1;n[3]=1;n[5]=1;n[6]=1;
break;
default:
break;
}
return n;//返回int数组
} }
 
First Number:
3
Second Number:
8
要反向的开关号为:1 4
[1, 0, 1, 1, 0, 1, 1]
[1, 1, 1, 1, 1, 1, 1]

改进版,实现连续数字序列

package Homework;

import java.util.Scanner;

/*数字数码管

数字或字母能够用7位数码管显示(就是排列为8字形的7个数码管)

       @@@@           0
@ @ 1 2
@ @ 3
@@@@ 4 5
@ @ 6
@ @
@@@@ 对于大型灯管,为了节约使用,在切换数字的时候,假设该灯管的状态没有改变,则不须要对该灯管关了再开。
已知一个数字变化的系列,求7个数码管开关的动作。 3:0,2,3,5,6
6:0,1,4,6,5,3
*/
public class NumberLight {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in); System.out.println("请输入数字序列(用逗号分隔):");
String str = sc.nextLine();
str="-1,"+str;//一刀切上式,给初始补一个-1,在后面调用方法的时候进入switch的default,默认是全灭的。这里仅仅要写不是0到9的数字就可以。
String str2 [] = str.split(",");//被分隔后的字符串数组 System.out.println("变更数字时要反向的开关号为:");
//外层循环,对str2循环,比較后一个与前一个的差别
//内层循环,对每个数字里面的数码管号循环,推断是否有不同。
for(int i=0;i<str2.length-1;i++){
System.out.print(str2[i+1]+":");
for(int k=0;k<7;k++){
if(showNumber(Integer.valueOf(str2[i+1]))[k]!=showNumber(Integer.valueOf(str2[i]))[k]){
System.out.print(k+" ");
}
}
System.out.println();
}
} //数字数码管显示方法,參数为要显示的数字
public static int[] showNumber(int a){
int []n = {0,0,0,0,0,0,0};
switch (a) {
case 0:
n[0]=1;n[1]=1;n[2]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 1:
n[2]=1;n[5]=1;
break;
case 2:
n[0]=1;n[2]=1;n[3]=1;n[4]=1;n[6]=1;
break;
case 3:
n[0]=1;n[2]=1;n[3]=1;n[5]=1;n[6]=1;
break;
case 4:
n[1]=1;n[2]=1;n[3]=1;n[5]=1;
break;
case 5:
n[0]=1;n[1]=1;n[3]=1;n[5]=1;n[6]=1;
break;
case 6:
n[0]=1;n[1]=1;n[3]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 7:
n[0]=1;n[2]=1;n[5]=1;
break;
case 8:
n[0]=1;n[1]=1;n[2]=1;n[3]=1;n[4]=1;n[5]=1;n[6]=1;
break;
case 9:
n[0]=1;n[1]=1;n[2]=1;n[3]=1;n[5]=1;n[6]=1;
break;
default:
break;
}
return n;//返回int数组
}
}
请输入数字序列(用逗号分隔):
8,0,0
变更数字时要反向的开关号为:
8:0 1 2 3 4 5 6
0:3
0:

隐藏password

password备忘扰乱法

我们的password假设非常长非常复杂,easy忘记。假设太简单,不安全。把password记录在本子上,更easy泄密!

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

由于每一个人对password全然记住困难,但从一些线索中回顾出来就非常easy。

password: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

嵌入时,能够横向或纵向。假设再复杂点,能够设计对角线。

/*
* 隐藏password password备忘扰乱法
我们的password假设非常长非常复杂,easy忘记。假设太简单,不安全。把password记录在本子上,更easy泄密!
有人想了这么个办法,把password嵌入一堆随机的数字中。
由于每一个人对password全然记住困难,但从一些线索中回顾出来就非常easy。
password: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 嵌入时,能够横向或纵向。假设再复杂点,能够设计对角线。
*/ package Homework; import java.util.Scanner; public class HideCode {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入要隐藏的password:");
String code = sc.nextLine(); System.out.println("请输入矩阵宽:");
int width = sc.nextInt();
System.out.println("请输入矩阵高:");
int height = sc.nextInt(); Scanner sc2 = new Scanner(System.in);
System.out.println("请输入方向(1表示横,2表示竖,3表示斜):");
String orientation = sc2.nextLine(); System.out.println("请输入起始位置x坐标:");
int x = sc2.nextInt();
System.out.println("请输入起始位置y坐标:");
int y = sc2.nextInt(); //首先生成一个随机矩阵
int[][]a = new int[height][width];
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
a[i][j] = (int)(10*Math.random());
}
}
//方向:横
if(orientation.equals("1")){
if(x>width||y+code.length()-1>height){
errorTips();
}else{
for(int i=0;i<code.length();i++){
a[x-1][y-1+i] = Integer.valueOf(String.valueOf(code.charAt(i)));
}
showMatrix(height,width,a);
}
}
//方向:竖
if(orientation.equals("2")){
if(x+code.length()-1>width||y>height){
errorTips();
}else{
for(int i=0;i<code.length();i++){
a[x-1+i][y-1] = Integer.valueOf(String.valueOf(code.charAt(i)));
}
showMatrix(height,width,a);
}
} //方向:斜
if(orientation.equals("3")){
if(x+code.length()-1>width||y+code.length()-1>height){
errorTips();
}else{
for(int i=0;i<code.length();i++){
a[x-1+i][y-1+i] = Integer.valueOf(String.valueOf(code.charAt(i)));
}
showMatrix(height,width,a);
}
}
} //尺寸不正确
public static void errorTips(){
System.out.println("请检查输入的起始位置或矩阵宽高。");
}
//显示生成的矩阵
public static void showMatrix(int height,int width,int a[][]){
for(int i=0;i<height;i++){
for(int j=0;j<width;j++){
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
}
请输入要隐藏的password:
1234567890
请输入矩阵宽:
11
请输入矩阵高:
11
请输入方向(1表示横,2表示竖,3表示斜):
3
请输入起始位置x坐标:
1
请输入起始位置y坐标:
2
2 1 4 0 1 8 3 9 3 2 9
1 7 2 9 2 6 4 0 3 0 5
6 7 7 3 2 5 1 6 7 9 8
1 0 7 7 4 4 9 0 8 4 8
2 4 3 4 4 5 2 5 1 5 5
9 6 5 8 0 2 6 9 7 8 2
1 8 9 6 3 4 7 7 2 4 5
4 6 4 2 0 8 6 3 8 4 4
8 1 2 6 7 8 0 6 6 9 8
3 1 0 6 4 5 3 7 9 0 0
3 6 7 1 3 1 9 3 3 0 3

编程算法基础-数字数码管-隐藏password的更多相关文章

  1. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

  2. 腾讯2017年暑期实习生编程题【算法基础-字符移位】(C++,Python)

     算法基础-字符移位 时间限制:1秒 空间限制:32768K 题目: 小Q最近遇到了一个难题:把一个字符串的大写字母放到字符串的后面,各个字符的相对位置不变,且不能申请额外的空间. 你能帮帮小Q吗? ...

  3. 现代3D图形编程学习-基础简介(2) (译)

    本书系列 现代3D图形编程学习 基础简介(2) 图形和渲染 接下去的内容对渲染的过程进行粗略介绍.遇到的部分内容不是很明白也没有关系,在接下去的章节中,会被具体阐述. 你在电脑屏幕上看到的任何东西,包 ...

  4. 现代3D图形编程学习-基础简介(1) (译)

    本书系列 现代3D图形编程学习 基础简介 并不像本书的其他章节,这章内容没有相关的源代码或是项目.本章,我们将讨论向量,图形渲染理论,以及OpenGL. 向量 在阅读这本书的时候,你需要熟悉代数和几何 ...

  5. A*算法解决八数码问题 Java语言实现

    0X00 定义 首先要明确一下什么是A*算法和八数码问题? A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法也是一种启发性的算法,也是解决许多搜索问题的有效算法.算法中的距离估 ...

  6. 编程零基础应当如何开始学习 Python?

    提前说一下,这篇福利多多,别的不说,直接让你玩回最有手感的怀旧游戏,参数贴图很方便自己可以根据喜好修改哦. 本篇通过以下四块展开,提供大量资源对应. 选一个好版本 有没有看过<在下坂本,有何贵干 ...

  7. python六十七课——网络编程(基础知识了解)

    网络编程: 什么是网络编程? 网络:它是一种隐形的媒介:可以将多台计算机使用(将它们连接到一起) 网络编程:将多台计算机之间可以相互通信了(做数据交互) 一旦涉及到网络编程,划分为两个方向存在,一方我 ...

  8. (转)Android高性能编程(1)--基础篇

    关于专题     本专题将深入研究Android的高性能编程方面,其中涉及到的内容会有Android内存优化,算法优化,Android的界面优化,Android指令级优化,以及Android应用内存占 ...

  9. java并发编程 线程基础

    java并发编程 线程基础 1. java中的多线程 java是天生多线程的,可以通过启动一个main方法,查看main方法启动的同时有多少线程同时启动 public class OnlyMain { ...

随机推荐

  1. 使用JSP实现商场购物车模块

    这些日子,学习JSP,只要找到一个小模块来试试你的手: 这里是实现车模块结果页面截图: 图1. 产品显示页面 通过此页面进行产品选择.增加到购物车 图2 .购物车页面 图3 . 商品数量设置 好了,先 ...

  2. 【SICP读书笔记(四)】练习2.27 --- 表序列reverse的扩展:树结构的deep-reverse

    题目要求是,修改练习2.18所做的reverse过程,得到一个deep-reverse过程.它以一个表为参数,返回另一个表作为值,结果表中的元素反转过来,其中的子树也反转. 例如: (define x ...

  3. 阅读&lt;反欺骗的艺术&gt;思考

    早期接受csdn发送本书<反欺骗的艺术 ---- 传说中的黑客世界里,分享经验>. 经过这本书发生床头, 每天晚上看上.直到今天, 刚读的书. 颇有感觉. 之所以当初选择读这本书, 完全被 ...

  4. char *详细指针

    我前段时间写的char*和char[]差额.今char*做一个更深入的了解 1:char像指针和其他指针,也定义一个地址,例如int*它定义了一个堆栈,4字节,char*之,现在写一段代码 #incl ...

  5. sql 与linq的转换

    1. left Join 原始sql select t.[MINTAccountIdentifier] from BSS_Tenant t left join BL_SAPCustomer s on ...

  6. 利用Sails.js+MongoDB开发博客系统

    http://yoyoyohamapi.me/categories/利用Sails-js-MongoDB开发博客系统/ 利用Sails.js+MongoDB开发博客系统 Apr 14, 2016 利用 ...

  7. NYOJ 300 &amp;&amp; hdu 2276 Kiki &amp; Little Kiki 2 (矩阵高速功率)

    pid=300">Kiki & Little Kiki 2 时间限制:5000 ms  |  内存限制:65535 KB 难度:4 描写叙述 There are n light ...

  8. 高榕资本宾悦:未使用的企业家Testin云测试服务类故障

    高榕资本岳斌:创业者未使用Testin云測试服务属不合格 2014/10/09 · Testin · 开发人员訪谈 Testin云測与工信部等联合承办的ICT中国.2014高层论坛之移动开发人员分论坛 ...

  9. index_ss hint 使用的运行计划变化对照

    index_ss  hint 使用的运行计划变化对照 当中 buffer 代表:当前操作中发生的内存读次数,包括一致性读和当前读 尽管 emp 表记录数不多,可是buffer 读内存的次数区别还是有点 ...

  10. linux下磁盘进行分区、文件系统创建、挂载和卸载(转)

    任务的原因:由于,刚购买来的服务器需要将磁盘挂载到操作系统上,为了挂载磁盘首先要对磁盘进行分区,然后进行文件系统的创建,最后将磁盘挂载到操作系统上的某个目录. MBR(Master Boot Reco ...