懵懵懂懂dfs回溯????

2021-10-03 16:34:30 字數 1584 閱讀 4731

題目描述

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.輸出順序按照字典序從小到大排序

#include

using

namespace std;

int n,k;

int s[10]

=;bool vis[10]

;int sum=0;

string f[

200]

;bool

cmp(string a,string b)

void

dfs(

int m)

}for

(int i=

6;i<

10;i++)}

if(m<

60&&h<12)

}if(flag) f[k++

]=a;

}return;}

for(

int i=

0;i<

10;i++)}

}int

main()

}return0;

}

其實一開始這道題目一點思路都沒有;

李某人給我大大的提示,把坑點都告訴我了;

第一思路:全部時間換算成分鐘制,然後加上去n個點在算出小時和分鐘;

問題:分鐘的點相加不能超過60;

時鐘的點相加不能超過12;

正確思路:

把點先做上標記;

當點的數等於n時,在算出時鐘和分鐘;

如果時鐘和分鐘不符合要求(上面問題裡面的要求)拒絕存入string型陣列裡;如果符合,存入陣列;

做的時候發現,陣列有重複,所以當存入陣列時要判斷是否有重複出現,沒有在進行存入

陣列進行排序,然後輸出;

懵懵懂懂渾渾噩噩

大半夜失眠,爬起來寫部落格,我也是絕了.一年的神不知鬼不覺的在職考研,從某海濱城市雙非上岸某一線城市末流211,說起來著實沒什麼可驕傲的。就突然想記錄下這一年的風風雨雨 誇張了些,還沒淋著 不過可以說說得與失吧。自認為自己不是乙個很自律的人,但這一年也不知道是什麼驅使著自己乙個人學習,乙個人準備複試...