Lrapava

ამოხსნა 2 (მეორე ვერსია)

Apr 22nd, 2021 (edited)
231
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. // პირველ ორ ხაზს ყურადღება არ მიაქციოთ...
  2. #include <bits/stdc++.h>
  3. using namespace std;
  4.  
  5. // NOT ფუქნცია. არგუმენტად იღებს string-ს, აბრუნებს string-ს.
  6. string NOT(string s) {
  7.     // ყოველი c სიმბოლოსთვის s-ში: თუ c == '0', მაშინ მის ადგილზე შევინახოთ '1', თუ არა და მის ადგილზე შევინახოთ '0'
  8.     for (char & c : s) if (c == '0') c = '1'; else c = '0';
  9.     // დავაბრუნოთ s (უკვე გადაკეთებული)
  10.     return s;
  11. }
  12.  
  13. // პასუხის გამოსათვლელი ფუნქცია. არგუმენტად იღებს n-ს, აბრუნებს string-ების სიმრავლეს.
  14. set <string> S(int n) {
  15.  
  16.     // თუ გვეკითხებიან პასუხს n = 0-სთვის, დავაბრუნოთ {0; 1} სიმრავლე
  17.     if (n == 0) return {"0", "1"};
  18.  
  19.     // string-ების სიმრავლე "prev"-ში შევინახოთ პასუხი n-1-სთვის.
  20.     set <string> prev = S(n-1);
  21.    
  22.     // "answer" სიმრავლის აღწერა. შემდგომ ამ სიმრავლეს ვაბრუნებთ.
  23.     set <string> answer;
  24.  
  25.     // ყოველი string ტიპის x-სთვის "prev" სიმრავლეში...
  26.     for (string x : prev) {
  27.         // "answer" სიმრავლეში შევინახოთ x "შეერთებული" კიდევ ერთ x-თან და x "შეერთებული" NOT x-თან.
  28.         answer.insert(x + x);
  29.         answer.insert(x + NOT(x));
  30.     }
  31.  
  32.     // დავაბრუნოთ "answer" სიმრავლე
  33.     return answer;
  34.  
  35. }
  36.  
  37. int main() {
  38.     // main() ფუნქცია -- აქედან იწყება პროგრამა
  39.     // მთელი (integer) ტიპის n ცვლადის აღწერა
  40.     int n;
  41.  
  42.     // n-ის შემოტანა
  43.     cin >> n;
  44.    
  45.     // Sn-ში შევინახოთ პასუხი n-სთვის
  46.     auto Sn = S(n);
  47.  
  48.     // ყოველი string ტიპის x-სთვის Sn-ში გამოვბეჭდოთ x
  49.     for (string x : Sn) cout << x << "\n";
  50.  
  51.     return 0;
  52.    
  53. }
  54.  
Add Comment
Please, Sign In to add comment