Infiniti_Inter

Удалите меня из этой жизни

Oct 22nd, 2019
133
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.56 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <iostream>
  3. #include <string>
  4. #include <random>
  5. using namespace std;
  6.  
  7.  
  8.  
  9. //const int minLengthOfBinaryNumber = 2; //минимальная  длина двоичной строки
  10. //const int maxLengthOfBinaryNumber = 63;//максимальная длина двоичной строки
  11.  
  12. random_device rnd;//библиотеки random, чтобы были максимально случайные числа
  13. mt19937 mersenne(rnd());// ^^^^
  14.  
  15. //возвращает случайное число, все числа по которым берется модуль - простые.
  16. long long randInt()
  17. {
  18.     return
  19.         ((mersenne() % 89659) * (mersenne() % 92489) + (mersenne() % 75503) * (mersenne() % 74797)) *
  20.            ((mersenne() % 65407) * (mersenne() % 60889) + (mersenne() % 57713) * (mersenne() % 55207)) +
  21.             mersenne();
  22. }
  23. // генератор длины строки
  24. //int genLength() {
  25. //  return max((long long)minLengthOfBinaryNumber, (long long)randInt() % maxLengthOfBinaryNumber);
  26. //}
  27.  
  28.  
  29. string decToBin(int n)
  30. {
  31.     string s = "";
  32.     while (n)
  33.     {
  34.         s += n % 2 + '0';
  35.         n /= 2;
  36.     }
  37.     reverse(s.begin(), s.end());
  38.     while (s.length() < 4)
  39.         s = '0' + s;
  40.     return s;
  41. }
  42. int binToDec(string s)
  43. {
  44.     int res = 0;
  45.     int x = 1;
  46.     for (int i = s.length() - 1; i >= 0; --i)
  47.     {
  48.         res += x*(s[i] - '0');
  49.         x *= 2;
  50.     }
  51.    
  52.     return res;
  53. }
  54.  
  55.  
  56. void Shuffle(string & s)
  57. {
  58.     for (int i = 0; i < s.length(); ++i)
  59.         for (int j = 0; j < s.length(); ++j)
  60.         {
  61.             bool shuffle = (bool)randInt() % 2;
  62.             if (shuffle)
  63.                 swap(s[i], s[j]);
  64.         }
  65. }
  66.  
  67. string GenBinaryNumber(int length)
  68. {
  69.     string res = "";
  70.     for (int i = 0; i < length; ++i)
  71.     {
  72.         res += randInt() % 2 + '0';
  73.     }
  74.  
  75.     Shuffle(res);
  76.     res[0] = '1';
  77.     return res;
  78. }
  79.  
  80. int main()
  81. {
  82.     //freopen("input.txt", "r", stdin);
  83.     //freopen("output.txt", "w", stdout);
  84.     setlocale(LC_ALL, "Russian");
  85.     int length = 8;
  86.     string S = GenBinaryNumber(length);
  87.     //string S = "10101101";
  88.     int cap = 16 * 8 + 15;//максимум 16 строк, по 8 символов + 15 пробелов между ними
  89.     for (int i = 0; i < 5; ++i)
  90.     {
  91.        
  92.         string s = S.substr(0, 4);
  93.         for (int j = 0; j < i; ++j)
  94.             s[j] = '0';
  95.         string t = S.substr(4, 4);
  96.         int cnt = (int)pow(2, i);//количество выводимых строк
  97.         int space = (cap - cnt * 9 + 1) / 2;
  98.         for (int j = 0; j < space; ++j)
  99.             cout << ' ';
  100.         int add = 16 / cnt;
  101.         int fs = binToDec(s);
  102.         for (int j = 0; j < cnt; ++j)
  103.         {
  104.             cout << decToBin(fs) << t << ' ';
  105.             fs += add;
  106.         }
  107.         cout << endl;
  108.        
  109.     }
  110.  
  111. }
Add Comment
Please, Sign In to add comment