数码管问题(c++实现)

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

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

  输出:输入YES或NO

input:

4107395682
 3  5 1 6  2  7 9  0  4  8
0
output:
YES
NO

分析:有这样一种思路,将每一笔表上顺序,这样每个数字就可以表示成一个字符串,如1为“35”,然后判断相邻两个是否符合规则可以用较段数字的字符串是否为较大字符串的子集来判断,如果是则符合

 1 #include<iostream>
 2 #include<string>
 3 using namespace std;
 4
 5 //判断相邻两个是否可相互转化
 6 int s(string max, string min)
 7 {
 8     int n = 0;
 9     for (int i=0; i < min.size(); i++)
10     {
11         for (int j = 0; j < max.size(); j++)
12         {
13             if (min[i] == max[j])
14                 n++;
15         }
16     }
17     if (n == min.size())
18         return 1;
19     else
20         return 0;
21 }
22
23 //判断函数
24 int cal(int a[])
25 {
26     int k;
27     string b[10] = { "123567", "35", "23467", "23456", "1345", "12456", "124567", "235", "1234567", "123456" };//将数码管中7话用数字1-7标记,用字符串存每个数字
28     //逐个比较a中相邻两个
29     for (int i = 0; i < 9; i++)
30     {
31
32         if (b[a[i]].size()>b[a[i + 1]].size())
33             k = s(b[a[i]], b[a[i+1]]);
34         else
35             k = s(b[a[i+1]], b[a[i]]);
36         if (!k)
37             return 0;
38     }
39     return 1;
40 }
41
42 int main()
43 {
44     int a[10];
45     while ((cin >> a[0]) && (a[0] != -1))
46     {
47         for (int i = 1; i < 10; i++)
48             cin >> a[i];
49         if (cal(a))
50             cout << "Yes" << endl;
51         else
52             cout << "No" << endl;
53     }
54     system("pause");
55     return 0;
56 }
时间: 2024-11-03 22:06:44

数码管问题(c++实现)的相关文章

1225 八数码难题

1225 八数码难题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description Yours和zero在研究A*启发式算法.拿到一道经典的A*问题,但是他们不会做,请你帮他们.问题描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765

入侵某有限公司#并成功提下西部数码某虚拟主机

目标站点存在dede5.7通用的sql注入漏洞 利用工具  直接插入一个管理员 随后通过某大牛的爬虫工具获取到后台地址为 http://www.syguizaoni.com/gzhhoutai/index.php 登录 直接在功能表里的文件式管理器里面上传一个大马 大马地址: http://www.syguizaoni.com/uploads/php.php 密码:520 可以跨目录查看多个站群  便知道这个服务器是一个虚拟主机 然后上传一个小马  准备提权 http://www.syguiza

HDU 1043 Eight八数码解题思路(bfs+hash 打表 IDA* 等)

题目链接 https://vjudge.net/problem/HDU-1043 经典的八数码问题,学过算法的老哥都会拿它练搜索 题意: 给出每行一组的数据,每组数据代表3*3的八数码表,要求程序复原为初始状态 思路: 参加网站比赛时拿到此题目,因为之前写过八数码问题,心中暗喜,于是写出一套暴力bfs+hash,结果TLE呵呵 思路一:bfs+hash(TLE) 1 #include <cstdio> 2 #include <cstring> 3 #include <queu

洛谷【P1379】八数码难题

P1379 八数码难题 题目描述 在3×3的棋盘上,摆有八个棋子,每个棋子上标有1至8的某一数字.棋盘中留有一个空格,空格用0来表示.空格周围的棋子可以移到空格中.要求解的问题是:给出一种初始布局(初始状态)和目标布局(为了使题目简单,设目标状态为123804765),找到一种最少步骤的移动方法,实现从初始布局到目标布局的转变. 输入输出格式 输入格式: 输入初试状态,一行九个数字,空格用0表示 输出格式: 只有一行,该行只有一个数字,表示从初始状态到目标状态需要的最少移动次数(测试数据中无特殊

八数码三种用时差距极大的写法

进化史,一种比一种长,一种比一种快.不过第三种似乎还不是最终形态. 第一种,傻逼级迭代加深. 去年十一月写的,那时候刚刚学迭代加深,敲了一个钟头才敲完,codevs上直接过,就没太管,觉得这是个水题.实际上呢,看后文. 1 #include<algorithm> 2 #include<iostream> 3 #include<cstring> 4 #include<cstdio> 5 using namespace std; 6 int sx,sy,lim,

八数码的八境界 [转载]

八数码的八境界   研究经典问题,空说不好,我们拿出一个实际的题目来演绎.八数码问题在北大在线测评系统中有一个对应的题,题目描述如下: Eight Time Limit: 1000MS    Memory Limit: 65536K  Special Judge Description The 15-puzzle has been aroundfor over 100 years; even if you don't know it by that name, you've seen it. I

树莓派控制数码管显示

1. 效果显示 2. 硬件设备 在某宝上买了一个4位共阴数码管.4个数字公用一个阴极,一共12个引脚.其中6,8,9,12是共阴引脚. 每个数字由 a-g 7个二极管和一个点dp.因为是在网上买的没有详细的器件手册,所以只能自己测试引脚与数码管上二极管的对应关系. 通过上图可以看出12号引脚对应的是第一位数字的共阴引脚,1号引脚对应数字e.依次测试,结果如下: 2.

(五)数码管仿真 02

电路图:注意 为了省事 把 数码管串联的电阻省去了 参考代码:  这里 检测按键并不好,抄的另外一篇日志,具体还要看书 #include<reg52.h> #include<intrins.h> #define uchar8 unsigned char #define uint16 unsigned int sbit key1=P2^0; sbit key2=P2^1; sbit key3=P2^2; sbit key4=P2^3; uchar8 code seg[]={ 0x3F

我的 FPGA 学习历程(10)&mdash;&mdash; 实验数码管驱动

根据黑金 AX301 手册,数码管位选信号命名为 SEL[5:0],其中 SEL[5] 对应最左边的数码管,而SEL[0] 对应最右边数码管:作为约定,在下面的描述中我们对应的称之为数码管 5 和数码管 0.数码管的段选信号被命名为 DIG[7:0]:DIG[7] 为小数点 DP,DIG[6] 为数码管 g 段,DIG[0] 为 a 段,其他类推即可. 由于数码管的段选信号是共用的,理论上是不可能同时显示六个不同字符的,但由于人眼的视觉残留现象,只要我们很快的依次显示每一个数字,就可以欺骗人眼达

单片机4*4按键数码管显示0-9

#include<reg51.h> #define KEY P1 //键盘 #define SEG P0 //数码管 sbit COM=P2^0; // 数码管com sbit OC = P2^1;//573锁存器 char code TAB[]={//0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0x88,0x83,0xa7,0xa1,0x84,0x84,0xbf,0x7f};//共阳极 0x3f,0x06,0x5b,0x4f,0x66,