Advertisement
juxtapositions

Untitled

Dec 13th, 2022
732
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.12 KB | None | 0 0
  1. #include<iostream>
  2. #include<cmath>  
  3. using namespace std;    
  4. int max(int a)            /*возвращает максимальный показатель степени числа 2*/
  5. {                         /*который показывает уровень надстройки*/
  6.     int p = 1,temp, p1;
  7.     while (pow(2, p) <= a)
  8.     {
  9.         temp = pow(2, p);
  10.         if (a % temp == 0 && temp <= a)
  11.                    p1 = p;
  12.         p++;
  13.     }  
  14.     return p1;
  15. }
  16.  int step(int a)  /*возвращает номер позиции для четных номеров*/
  17. {      
  18.     return a / pow(2,max(a));
  19. }
  20. int count_step_define(int a, bool rev_along)/*возвращает номер колышка с которого будет очередной шаг*/
  21. {      
  22.     if (rev_along)
  23.     {  
  24.         int temp = ((step(a) - 1) / 2) % 3;
  25.         if (max(a) % 2 == 0)
  26.             return 1 + temp;
  27.         else
  28.         {
  29.             if(1 - temp == 0)
  30.                     return 3;
  31.             else
  32.                     return 1 - temp > 0? 1 - temp: 2;
  33.         }
  34.     }        
  35.     else
  36.             return 1 + ((a - 1) / 2) % 3;
  37. }
  38. int main()
  39.     {
  40.     unsigned long long n, loop, a = 1;      
  41.     cin >> n;   /*количество дисков*/
  42.     loop = pow(2, n) - 1;   /*количество требуемых перемещений*/    
  43.     while (a <= loop)
  44.     {  
  45.         int temp, over;
  46.         if (a % 2 == 1)
  47.         {              
  48.               temp = count_step_define(a,0);
  49.              (temp + 1 > 3)? over = 1: over = temp + 1;        
  50.         }
  51.         else
  52.         {                
  53.              temp = count_step_define(a,1);
  54.              if (max(a) % 2 == 0)                
  55.                  (temp + 1 > 3)? over = 1: over = temp + 1;              
  56.              else                
  57.                  (temp - 1 < 1)? over = 3: over = temp - 1;            
  58.         }
  59.         cout << temp << " - >" << over << endl;/*с какого и на какой колышек переместить*/
  60.         a++;            
  61.     }      
  62.      system("pause");
  63.     return 0;
  64.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement