作业训练三 编程题 11. 数码管【一种神奇的方法】

  1. 数码管

【问题描述】

液晶数码管用七笔阿拉数字表示的十个数字,把横和竖的一 个短划都称为一笔,即7有3笔,8有7笔等。对于十个数字一种排列,要做到两相邻数字都可以由另一个数字加上几笔或减去几笔组成,但不能又加又减。比如 7→3是允许的,7→2不允许。任意输入一组数,判断是否符合上述规则,注意,1在右边。

【输入形式】

每行输入一个0~9的排列,数字之间用空格分隔,以-1作为输入结束

【输出形式】

输出YES或NO

【样例输入】

4 1 0 7 3 9 5 6 8 2
3 5 1 6 2 7 9 0 4 8
-1
【样例输出】

YES
NO

//看到这种方法的我直接Σ(っ °Д °;)っ
//模拟笔画是计算机做的事儿,但人脑可以直接搞个转换矩阵出来
//map容易出错
#include <iostream>
#include <vector>
using namespace std;
int main() {
	bool map[10][10] = {
		{1, 1, 0, 0, 0, 0, 0, 1, 1, 0},//0
		{1, 1, 0, 1, 1, 0, 0, 1, 1, 1},//1
		{0, 0, 1, 0, 0, 0, 0, 0, 1, 0},//2
		{0, 1, 0, 1, 0, 0, 0, 1, 1, 1},//3
		{0, 1, 0, 0, 1, 0, 0, 0, 1, 1},//4
		{0, 0, 0, 0, 0, 1, 1, 0, 1, 1},//5
		{0, 0, 0, 0, 0, 1, 1, 0, 1, 0},//6
		{1, 1, 0, 1, 0, 0, 0, 1, 1, 1},//7
		{1, 1, 1, 1, 1, 1, 1, 1, 1, 1},//8
		{0, 1, 0, 1, 1, 1, 0, 1, 1, 1} //9
	};
	vector<int> vec(10);
	bool flag = 1;
	while (1) {
		flag = 1;
		cin >> vec[0];
		if (vec[0] == -1) {
			break;
		}
		for (int i = 1; i < 10; i++) {
			cin >> vec[i];
			if (!map[vec[i]][vec[i - 1]]) {
				flag = 0;
			}
		}
		if (flag) cout << "YES" << endl;
		else cout << "NO" << endl;
	}
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 1. 数码管动态扫描显示自己的学号的实现方法: 首先需要设置对应数码管端口的引脚方向为输出,并初始化数码管显示值。然后通过软件循环扫描每个数码管,依次将其对应数字输出到对应引脚,再通过延时控制下一位数码管的扫描。同时,读取学号的各个数字,将其存入变量中,循环输出到对应数码管即可。 2. 数码管实时显示最近的8个按键值的实现方法: 需要设置对应按键的引脚方向为输入,并初始化数码管显示值。使用中断读取按键的值,并将其倒序存入一个长度为8的数组中。然后在主程序中循环读取该数组中的值,将其输出到对应数码管即可。 3. 自定义键盘功能的实现方法: 需要设置对应按键的引脚方向为输入,并初始化数码管显示值。在中断中读取按键的值,并根据不同的按键做出不同的响应。比如可以通过按键控制LED的亮灭,或者通过按键切换不同的模式,执行不同的程序。根据具体的需求来设计自定义功能即可。 ### 回答2: 1. 数码管动态扫描显示自己的学号: 使用80c51编程可以实现数码管的动态扫描显示自己的学号。首先,我们需要将自己的学号编码并存储在程序中。接着,我们需要将数码管的引脚与80c51的IO口相连,其中一个引脚连接到数码管的共阳(或共阴)端,其余引脚连接到数码管的段选端。通过设置IO口的输出电平,我们可以逐个点亮数码管的每个段,从而显示对应的数字或字母,实现动态扫描显示学号的效果。 2. 数码管实时显示最近的8个按键值: 通过80c51编程,我们可以实现数码管的实时显示最近的8个按键值。首先,我们需要将8个按键的引脚与80c51的IO口相连,并通过IO口设置为输入模式。然后,我们需要编写程序,通过读取IO口的状态来判断按键的按下与释放,并将按键的值存储在变量中。随后,我们可以通过控制数码管的引脚和变量的数值,将每个按键值依次显示数码管上,实现实时显示最近8个按键值的功能。 3. 加入判断按键的实验,自定义键盘功能,如设计: 通过80c51编程,我们可以加入判断按键的实验,实现自定义键盘功能。首先,我们需要将自定义键盘的各个按键引脚与80c51的IO口相连,并设置为输入模式。然后,我们可以通过编写程序,通过读取IO口的状态来判断每个按键的按下与释放,并根据不同按键的状态执行不同的操作。例如,可以通过判断某个按键的按下来调用相应的函数,实现自定义的键盘功能。这样,我们可以根据自己的需求设计不同的按键功能,实现个性化的键盘操作。 ### 回答3: 1. 数码管动态扫描显示自己的学号:我可以使用80c51编程语言来实现数码管的动态扫描显示自己的学号。首先,我需要将我的学号转换为对应的数码管显示码。然后,我可以编写一个循环程序,在循环中依次扫描每个数码管,将对应的显示码输出到数码管上,以实现动态显示。 2. 实时显示最近的8个按键值:通过80c51编程,我可以实现数码管的实时显示最近8个按键的值。我可以使用一个数组来保存按键的值,并通过按键中断的方式捕获每次按键的值。然后,我可以编写一个循环程序,在循环中将最近的8个按键值从数组中读取,并将其显示数码管上。 3. 加入判断按键的实验,自定义键盘功能,如设计:为了实现按键的判断和自定义键盘功能,我可以借助80c51编程语言中的按键中断和编程方法。首先,我可以配置按键中断,使其在按键按下时触发中断。然后,我可以编写中断服务程序,用于判断按下的按键,并根据按键的不同执行相应的自定义功能。例如,我可以设计按下某个按键时触发某个动作,或者按下不同组合按键时触发不同的功能。在编程中,我可以使用if-else语句或者switch-case语句来实现按键的判断和相应的功能。这样,我就可以实现自定义键盘功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值