博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
题一 电子数字
阅读量:7168 次
发布时间:2019-06-29

本文共 4024 字,大约阅读时间需要 13 分钟。

一、题目

时间限制:10000ms

单点时限:1000ms
内存限制:256MB

描述

电子数字在生活中很常见,而许多的电子数字是由LED数码管制作而成。数字LED数码管一般由7个发光二极管封装在一起,组成’8’字型,引线在内部连接完成。如下图所示,我们可以对每个发光管进行编码从1到7。而数字0到数字9可以由这七根发光管的亮暗来表示。

这里写图片描述

对LED数码管的二极管进行编码

digit.jpg

用LED数码管表示数字0-9

假设我们现在有从左到右排列好的K个LED数码管,并且我们已知每个数码管当前有哪些编号的二极管是亮着的,另外剩余的二极管由于某些原因,我们并不清楚它们的亮暗情况。由于已经有部分二极管是确定亮着的,所以每个LED数码管能表示的数字范围会有所缩小,譬如假设1号二极管已经确定是亮着的状态,那么这个LED数码管就不能表示数字1和4。

我们想知道的是,给定一个数N,在这K个LED数码管的当前亮暗的状态下,所有可能表示的数中,比N小的数有多少个。

注意,前导0是必须的,假设有4个数码管的话,’0000’表示0,’0123’表示123,即每个数的表示方法唯一。

输入

每个输入数据包含多个测试点。

第一行为测试点的个数 S ≤ 100。之后是 S 个测试点的数据。测试点之间无空行。

每个测试点的第一行为 K(1 ≤ K ≤ 5)和N(0 ≤ N ≤ 109)。之后是K行,每行表示对应数码管已点亮的二极管的情况。每行至少包含一个数字,表示对应点亮的二极管的编号,即每个数码管至少有一根二极管是点亮的。二极管编号的范围保证在1到7之间,且每行无重复编号。

注意表示数码管点亮情况的每行数字之间以及行首行末之间可能存在冗余空格,每行的字符总长度不超过100。

输出

对于每个测试点,对应的结果输出一行,表示这K个数码管在当前状态下,所有可能表示的数中,比N小的数有多少个。

样例解释

第一个样例中,只有’020’, ‘026’, ‘028’符合要求。

第三个样例中,只有’000’符合要求。

样例输入

3

3 50
3 1
1 4 5
1 5 6 7
4 100
1 2 3
4 5
6
7
1 1
7

样例输出

3

0
1

分析:这题是一道相对思路直观的题目,但是后面处理比 N 小的数,是可以转换为排列组合的数学问题解的。当然这样就需要判断是不是相等,如果相等就继续深入。

二、code

排列法:

#include 
#include
#include
using namespace std;int res[12][12];int digitCnt[6] ={
0}; //该位可行计数int miniCnt[6] = {
0}; //该位比之小的int equalCnt[6] = {
0}; //是否和所比数当位有相等int manyDigit(int a) { int cnt = 1; while ( a/=10 ) { ++cnt; } return cnt;}//get特定位数int getDigit(int a, int n) { int p = pow(10,n-1); return (a/p)%10;}void work(int &resCnt,int deep,int n) { if(deep == n) { //递归结束条件 return; } if ( equalCnt[deep] ) { //如果可相等 work(resCnt,deep+1,n); int tmpCnt = miniCnt[deep]; for (int i=deep+1;i
>T;start: while (T--) { //init for (int i=0;i<12;++i) { for (int j=0;j<12;++j) { res[i][j] = 1; } } memset(digitCnt,0,sizeof(digitCnt)); memset(miniCnt,0,sizeof(miniCnt)); memset(equalCnt,0,sizeof(equalCnt)); int K; cin>>K; int N; cin>>N; getchar(); for (int i=0;i

暴力:

#include 
#include
using namespace std;void getNum(vector
> numList, int deep, int temp, vector
&totalNums);int main(void){ int deng[10][7] = { {
1,1,1,0,1,1,1},//0 {
0,0,1,0,0,1,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},//7 {
1,1,1,1,1,1,1}, {
1,1,1,1,0,1,1}//9 }; int S_test; //测试点的个数 int K_LED; //K个LED数码管 int compareNum; //给定每个测试点比较的数 cin>>S_test; int *endAnswer = new int[S_test]; //输出结果 for(int i=0;i
>K_LED>>compareNum; //K个LED数码管, 测试的数字 cin.ignore(); //忽略上一行的换行符!!! vector
>num_K_LED; //存储每个LED可能的数字 for (int j=0;j
>eachLine; //每行 int servenLight[7] = { 0}; //单个LED的7个指示灯哪个亮 int idx = 0; //数组下标 for(int k=0;k
num_eachLED; //记录单个LED中servenLight[7]中亮的可能是哪些数字? for (int deng_i = 0; deng_i <10;deng_i ++) //循环0-9,符合的加入num_eachLED { bool rs = true; int idx = 0; while (servenLight[idx] !=0) //所有亮的指示灯都在 这个数字中 { if(deng[deng_i][ servenLight[idx] -1] != 1) { rs = false; break; } idx++; } if(rs) { num_eachLED.push_back(deng_i); } } num_K_LED.push_back(num_eachLED); } vector
totalNums; //记录所有组合出来的数字 int deep =0; int temp =0; getNum(num_K_LED, deep, temp, totalNums); int count = 0; for (int totalNums_i = 0; totalNums_i < totalNums.size();totalNums_i++) { if(compareNum >= totalNums[totalNums_i]) { count++; } } endAnswer[i] = count; } for(int i = 0; i
> numList, int deep, int temp, vector
&totalNums){ if(deep < numList.size()-1) { for(int i=0; i < numList[deep].size(); i++) { int newInt = temp + numList[deep][i] * pow(10,numList.size()- deep -1); getNum(numList, deep+1, newInt,totalNums); } } else if(deep == numList.size()-1) { for(int i=0; i < numList[deep].size(); i++) { int newInt = temp + numList[deep][i] * pow(10,numList.size()- deep -1); totalNums.push_back(newInt); } }}

转载地址:http://iihwm.baihongyu.com/

你可能感兴趣的文章
KVM虚拟机管理指南(纯命令行模式)
查看>>
Hibernate 一对多注解 mappedby 作用
查看>>
grub legacy练习 之 单用户模式修改root账户口令,并为grub菜单项设置密码保护功能...
查看>>
VLAN(单臂路由,三层路由功能)
查看>>
Apache Crunch:用于简化MapReduce编程的Java库
查看>>
Xinetd属性
查看>>
struts1.x下载文件
查看>>
JuniperSRX Filter-Based Forwarding
查看>>
Linux杀毒软件(ClamAV)
查看>>
Nginx下编写c模块来阻止HTTP代理服务器的访问
查看>>
golang连接mysql操作及动态连接池设置
查看>>
joda-time
查看>>
数据库主从安装、主从同步测试、不完全同步再到程序监控
查看>>
CentOS安装rstatd服务
查看>>
I/O模型
查看>>
解决centos7命令行中文乱码
查看>>
mysql 优化
查看>>
浮动窗口-固定窗口-css实现窗口浮动-jq浮动窗口-三种方法
查看>>
如此悲伤,如此愉悦,如此独特
查看>>
jQuery.extend 函数详解
查看>>