1 從 1~n 這 n 個整數中隨機選取任意多個,輸出全部可能的選擇方案。 2 3 輸入格式 4 輸入一個整數n。 5 6 輸出格式 7 每行輸出一種方案。 8 9 同一行內的數必須升序排列,相鄰兩個數用剛好1個空格隔開。 10 11 對於沒有選任何數的方案,輸出空行。 12 13 本題有自定義校驗器(SPJ),各行(不一樣方案)之間的順序任意。 14 15 數據範圍 16 1≤n≤15 17 輸入樣例: 18 3 19 輸出樣例: 20 21 3 22 2 23 2 3 24 1 25 1 3 26 1 2 27 1 2 3
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 vector<int> result; 7 vector<int> v; 8 int n; 9 10 void dfs(int i) 11 { 12 if(i == n){ 13 for(auto& e:result){ 14 cout << e << ' '; 15 } 16 cout <<endl; 17 return; 18 } 19 20 result.push_back(v[i]); 21 dfs(i+1); 22 result.pop_back(); 23 24 dfs(i+1); 25 26 } 27 28 int main() 29 { 30 31 cin >> n; 32 for(int i= 1;i <=n;i++){ 33 v.push_back(i); 34 } 35 36 dfs(0); 37 38 return 0; 39 }
從 1~n 這 n 個整數中隨機選出 m 個,輸出全部可能的選擇方案。 輸入格式 兩個整數 n,m ,在同一行用空格隔開。 輸出格式 按照從小到大的順序輸出全部方案,每行1個。 首先,同一行內的數升序排列,相鄰兩個數用一個空格隔開。 其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面(例如1 3 5 7排在1 3 6 8前面)。 數據範圍 n>0 , 0≤m≤n , n+(n−m)≤25 輸入樣例: 5 3 輸出樣例: 1 2 3 1 2 4 1 2 5 1 3 4 1 3 5 1 4 5 2 3 4 2 3 5 2 4 5 3 4 5
1 #include <iostream> 2 #include <vector> 3 4 5 using namespace std; 6 7 int n ,m; 8 vector<int> result; 9 vector<int> v; 10 11 void dfs(int i){ 12 if(result.size() == m){ 13 for(auto& e:result){ 14 cout << e << ' '; 15 } 16 cout <<endl; 17 return; 18 }else if(i == n){ 19 return; 20 } 21 22 result.push_back(v[i]); 23 dfs(i+1); 24 result.pop_back(); 25 26 dfs(i+1); 27 } 28 29 30 int main() 31 { 32 cin >> n >> m; 33 for(int i = 1;i <= n;i++){ 34 v.push_back(i); 35 } 36 37 dfs(0); 38 }
把 1~n 這 n 個整數排成一行後隨機打亂順序,輸出全部可能的次序。 輸入格式 一個整數n。 輸出格式 按照從小到大的順序輸出全部方案,每行1個。 首先,同一行相鄰兩個數用一個空格隔開。 其次,對於兩個不一樣的行,對應下標的數一一比較,字典序較小的排在前面。 數據範圍 1≤n≤9 輸入樣例: 3 輸出樣例: 1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
1 #include <iostream> 2 #include <vector> 3 4 using namespace std; 5 6 vector<int> v; 7 8 int n ; 9 10 void dfs(int i, vector<int>& result){ 11 if(i== n){ 12 for(auto& e:result){ 13 cout << e << ' '; 14 } 15 cout <<endl; 16 return; 17 } 18 19 for(int j = 0; j < v.size();j++){ 20 if(v[j] != 0){ 21 result[i] = v[j]; 22 v[j] = 0; 23 dfs(i+1,result); 24 v[j] = result[i] ; 25 } 26 } 27 } 28 29 int main() 30 { 31 cin >> n; 32 for(int i= 1; i<=n;i++){ 33 v.push_back(i); 34 } 35 vector<int> result(n,0); 36 37 dfs(0,result); 38 39 return 0; 40 }