Advertisement
marius7122

Untitled

Jul 16th, 2021
996
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.13 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int cautareBinara(int nr)
  5. {
  6.     int inc = 0, sf = nr, ans;
  7.  
  8.     while (inc <= sf)
  9.     {
  10.         int mid = (inc + sf) / 2;
  11.         if (1ll * mid * (mid + 1) / 2 >= nr)
  12.         {
  13.             ans = mid;
  14.             sf = mid - 1;
  15.         }
  16.         else
  17.         {
  18.             inc =  mid + 1;
  19.         }
  20.     }
  21.     return ans;
  22. }
  23.  
  24. void gasesteCoordonate(int x, int &linie, int &col)
  25. {
  26.     linie = cautareBinara(x);
  27.     col = x - (linie - 1) * linie / 2;
  28. }
  29.  
  30. int gasesteNr(int linie, int coloana)
  31. {
  32.     return (linie - 1) * linie / 2 + coloana;
  33. }
  34.  
  35. int main()
  36. {
  37.     int x, y;
  38.     cin >> x >> y;
  39.  
  40.     int xLinie, xCol, yLinie, yCol;
  41.     gasesteCoordonate(x, xLinie, xCol);
  42.     gasesteCoordonate(y, yLinie, yCol);
  43.  
  44.     int linieDir = (xLinie < yLinie) ? 1 : -1;
  45.     int colDir = (xCol < yCol) ? 1 : -1;
  46.  
  47.     while (xLinie != yLinie && xCol != yCol)
  48.     {
  49.         cout << gasesteNr(xLinie, xCol) << ' ';
  50.         xLinie += linieDir;
  51.         xCol += colDir;
  52.     }
  53.  
  54.     while (xLinie != yLinie)
  55.     {
  56.         cout << gasesteNr(xLinie, xCol) << ' ';
  57.         xLinie += linieDir;
  58.     }
  59.  
  60.     while (xCol != yCol)
  61.     {
  62.         cout << gasesteNr(xLinie, xCol) << ' ';
  63.         xCol += colDir;
  64.     }
  65.     cout << gasesteNr(xLinie, xCol) << ' ';
  66.     return 0;
  67. }
  68.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement