Advertisement
O_Egor

Шифр перестановками

Mar 23rd, 2021 (edited)
946
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.90 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4.  
  5. int main()
  6. {
  7.     string s;
  8.     getline(cin, s);
  9.     int n, m;
  10.     cin >> n;
  11.     if(s.size() % n)
  12.         m = s.size() / n + 1;
  13.     else
  14.         m = s.size() / n;
  15.  
  16.     vector<vector <char> > v (m, vector<char>(n, ' '));
  17.     int k(0);
  18.     for(int i = 0; i < m; ++i)
  19.     {
  20.         for(int j = 0; j < n; ++j)
  21.         {
  22.             if(k < s.size())
  23.             {
  24.                 v[i][j] = s[k];
  25.                 k++;
  26.             }
  27.             else
  28.                 break;
  29.         }
  30.     }
  31.  
  32.     for(int i = 0; i < v.size(); ++i)
  33.     {
  34.         for(int j = 0; j < n; ++j)
  35.             cout << v[i][j];
  36.         //cout << '\n';
  37.     }
  38.  
  39.     cout << '\n';
  40.     string shifr;
  41.     cin >> shifr;
  42.  
  43.     for(int i = 0; i < m; ++i)
  44.     {
  45.         vector <char> v1(m);
  46.         for(int j = 0; j < n; ++j)
  47.             v1[j] = v[i][(shifr[j] - '0') - 1];
  48.         for(int j = 0; j < n; ++j)
  49.             v[i][j] = v1[j];
  50.     }
  51.  
  52.     cout << '\n';
  53.  
  54.     for(int i = 0; i < v.size(); ++i)
  55.     {
  56.         for(int j = 0; j < n; ++j)
  57.             cout << v[i][j];
  58.         cout << '\n';
  59.     }
  60.     cout << '\n';
  61.     for(int j = 0; j < n; ++j)
  62.     {
  63.         for(int i = 0; i < m; ++i)
  64.             cout << v[i][j];
  65.         //cout << '\n';
  66.     }
  67.  
  68.     //cout << v[v.size() - 1].size();
  69.     //cout << '\n' << v.size() << ' ' << m;
  70.     cout << '\n';
  71.  
  72.     for(int i = 0; i < m; ++i)
  73.     {
  74.         vector <char> v1(m);
  75.         for(int j = 0; j < n; ++j)
  76.             v1[(shifr[j] - '0') - 1] = v[i][j];
  77.         for(int j = 0; j < n; ++j)
  78.             v[i][j] = v1[j];
  79.     }
  80.  
  81.     cout << '\n';
  82.  
  83.     for(int i = 0; i < v.size(); ++i)
  84.     {
  85.         for(int j = 0; j < n; ++j)
  86.             cout << v[i][j];
  87.         //cout << '\n';
  88.     }
  89.  
  90.     return 0;
  91. }
  92.  
  93. /**
  94. Простые перестановки вносят сумятицу
  95. 5
  96. 35142
  97. 31254
  98. **/
  99.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement