f 性能优化-蓝桥杯17114 残缺的数字 - Powered by qidao123.com技术社区

蓝桥杯17114 残缺的数字

打印 上一主题 下一主题

主题 2048|帖子 2048|积分 6144

题目形貌

七段码显示器是一种常见的显示数字的电子元件,它由七个发光管组成:


图依次展示了数字 0∼9 用七段码来显示的状态,其中灯管为黄色表示点亮,灰色表示熄灭。根据灯管的亮暗状态,我们可以用一个状态码(状态码是一个 7 位的二进制数字)来表示一个七段码,令灯管点亮时状态为 1,灯管熄灭时状态为 0,按照灯管 ABCDEFG 的顺序标识一个七段码,则数字 0∼9 的状态码为:
数字状态码数字状态码01111110510110111011000061011111211011017111000031111001811111114011001191111011 小蓝有一个喜爱的数字,长度为 18 位,每一位用一个七段码显示器来展示 (每位只能是 0∼9,可以包罗前导零),由于灯管故障,一些本该点亮的灯管处于了熄灭状态。例如,对于一个长度为 2 的数字来说,当两个七段码对应的状态码分别为: 1011111(高位)、1110011(低位)时,原本的数字大概会是: 68、69、88、89,有 4 种大概的值。
18 个七段码显示器对应的状态码分别为:
  1. 0000011
  2. 1001011
  3. 0000001
  4. 0100001
  5. 0101011
  6. 0110110
  7. 1111111
  8. 0010110
  9. 0101001
  10. 0010110
  11. 1011100
  12. 0100110
  13. 1010000
  14. 0010011
  15. 0001111
  16. 0101101
  17. 0110101
  18. 1101010
复制代码

其中每行表示一个七段码对应的的状态码(按照数字的高位到低位给出)。请你判断下小蓝喜爱的数字有多少种大概的值。

判断每个残缺的状态码能对应的数字个数,相乘
判断一个残缺的状态码对应的数字个数:
如果状态码的某一位是1,但数字的尺度状态码是 0,则说明状态码不大概是这个数字
  1. #include<iostream>
  2. #include<string>
  3. using namespace std;
  4. //数字 0~9 的状态码
  5. char c[10][8]={"1111110","0110000","1101101","1111001","0110011","1011011","1011111","1110000","1111111","1111011"};
  6. int ans = 1;
  7. int check(string s)
  8. {
  9.         int cnt = 0;  //记录可能对应的数字个数
  10.         bool flag = 1;
  11.        
  12.         for(int i=0; i<=9; ++i)  //遍历数字0到9
  13.         {
  14.                 flag = 1;  //假设当前状态码能匹配到一个数字
  15.                 for(int j=0; j<=6; ++j)  //遍历七段码的每一位
  16.                 {
  17.                         if(s[j]=='1' && c[i][j]=='0')
  18.                         {
  19.                                 //如果状态码 s的第 j位是 '1',但数字 i的标准状态码 l[i][j] 是 '0'
  20.                                 //则说明状态码 s 不可能是数字 i
  21.                                 flag = 0;
  22.                                 break;
  23.                         }
  24.                 }
  25.                 if(flag) cnt++;
  26.         }
  27.         return cnt;
  28. }
  29. int main()
  30. {
  31.         string s;
  32.         for(int i=1; i<=18; ++i)
  33.         {
  34.                 cin>>s;               
  35.                 ans *= check(s);
  36.         }
  37.        
  38.         cout<<ans;
  39.        
  40.         return 0;
  41. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

盛世宏图

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表