题目描述
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,