LZY去年买了个表

这篇博客介绍了如何根据二进制手表上点亮的LED数量,推算可能显示的所有时间,并给出了样例输入输出、解题思路及代码实现。强调了解决问题时要考虑小时和分钟的范围限制,并使用集合进行去重和排序。
摘要由CSDN通过智能技术生成

题目描述

LZY去年买了个表,很神奇,是个二进制手表。如下图所示
在这里插入图片描述
例如,上面的二进制手表读取 “3:25”。
输入一个非负整数 n 代表当前 LED 亮着的数量,输出所有可能的时间。
结果按字典序排列

输入

测试数据由多组测试样例组成。每组测试样例第一行输入一个整数 n ( 0 <= n <= 8 )

输出

输出所有可能的时间组合

样例输入

1

样例输出

0:01
0:02
0:04
0:08
0:16
0:32
1:00
2:00
4:00
8:00

提示

1.小时不会以零开头,比如 “01:00” 是不允许的,应为 “1:00”。
2.分钟必须由两位数组成,可能会以零开头,比如 “10:2” 是无效的,应为 “10:02”。
3.输出顺序按照字典序从小到大排序

思路

首先我们可以知道return的条件是亮了的灯是不是等于n
然后这个是二进制表 我们可以设置数组{1,2,4,8,1,2,4,8,16,32}来存放时针和秒针
我们还可以知道这是一个12时的表 最大时间是11.59分
也就是时针四个灯加起来得<12 分钟加起来得<60
在设置一个vis来判断是不是用过
题目说得按照字典序从小到大
我们可以用到stl容器中的set
set可以去重而且自动从小打到排序

代码

#include<bits/stdc++.h>
using namespace std;
int n;
int t[11]={
   1,2,4,8,16,32,1,
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值