1. C++ / Говнокод #28153

    0

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    #include <iostream>
    #include <vector>
    #include <string>
    
    int main()
    {
        int n = 6;
        std::vector<int> vec;
    
        for (int i = 0; i < n; i++)
        {
            if ((i % 2) == 0)
            {
                std::reverse(vec.begin(), vec.end());
            }
    
            vec.push_back(i);
    
            if ((i % 2) != 0)
            {
                std::reverse(vec.begin(), vec.end());
            }
    
            for (int j = 0; j < vec.size(); j++)
            {
                std::cout << vec[j] + 1;
                if (j != vec.size() - 1)
                {
                    std::cout << "-";
                }
            }
            std::cout << "\n";
    
        }
    }

    Цель напечатать на экране следующее:
    1
    2-1
    1-2-3
    4-3-2-1
    1-2-3-4-5
    6-5-4-3-2-1

    насколько это говнокод от 0 до 10?

    Запостил: pistael, 05 Мая 2022

    Комментарии (28) RSS

    • лучше использовать foreach
      Ответить
    • Говно.
      Ответить
    • > насколько это говнокод от 0 до 10?
      √-1

      1) Нахрена тебе <string> здесь?
      2) Почитай про функции и разбей свой код, чтобы он не был одной портянкой. Хотя бы функцию печати выдели.
      3) Кручу-верчу, запутать хочу. Если не прослеживать выполнение кода, непонятно нахрена тут два разворота вектора. Ну и операция эта недешёва.
      4) Почитай про итераторы, и адаптеры итераторов (хотя сейчас лучше сразу читать про рейнджи), конкретно про reverse_iterator.
      5) По поводу вывода: привыкай работать итераторами или рейнджами и range-based-for, а не индексами. Каконично также выводить разделитель перед каждым элементом, кроме первого, а не после каждого, кроме последнего.
      Ответить
      • Нахуя ему итераторами и рейнджами сейчас мозг забивать? Чел учится программировать.
        Ответить
        • Когда берёшь в руки молоток, все проблемы становятся похожи на гвозди.
          Ответить
        • если учишься программировать то бери Си, а не C++.
          Ответить
          • Совершенно верно.

            Учить программировать на С++ новичка это как учить арифметике в школе посредством mathcad
            Ответить
      • нахуй реверсить вектор, достаточно взять обратный итератор
        Ответить
    • Лучше не используй вектор.
      В цикле смотри чётность итерации: в зависимости от этого делай цикл от 1 до i, либо от i до 1 и распечатывай.
      Ответить
    • #include <iostream>
      #include <string>
      
      using namespace std; // простите за это)
      
      int main()
      {
          const int DEPTH = 6;
          for (int i{1}; i <= DEPTH; ++i)
          {
              if (i % 2 == 1)
                  for (int j{1}; j <= i; ++j)
                      cout << j << ((j != i) ? "-" : "");
              else
                  for (int j{i}; j >= 1; --j)
                       cout << j << ((j != 1) ? "-" : "");
              cout << '\n';
          }
          return 0;
      }


      Ну и строки-разделители можно на символы заменить.
      Ответить
      • Ко всем комментаторам --- зачем тут вектора? Задача на циклы, задача банальнейшая.
        Ответить
      • int main()
        {
            const int DEPTH = 6;
            for (int i = 1; i <= DEPTH; ++i)
                    for (int j = 1; j <= i; ++j)
                        printf("%d%c", i%2?j:i-j+1, "-\n"[i == j]);
        }


        https://ideone.com/l9MzVg
        Ответить
        • Снимаю шляпу!

          Но тернарный оператор без форматирования выглядит противно.
          Ответить
        • #include <stdio.h>
          #define A long
          #define B 2
          #define C >>
          #define D <
          #define E <
          #define F -
          #ifdef __clang__
          #define CLANG (B C (B C (B C (B C 1))))
          #else
          #define CLANG 0
          #endif
          int main(void)
          {
              for (A i = B C (B C 1); i <=
                              ((A)main F
                             (A)printf) / 
                               (B * B 
                               * B * 
                               B F (B C 
                               (B C 1) + CLANG)); 
                      i = F~i)         for (A j = 
                      B C (B C 1);     j <= i; j = F~j)    
                      printf("%d%c",   i % B ? j : i    
                      F j F- (B C (B   C 1)), "-\n"       
                      [!!(i ^ j) ^(B   C (B C 1))]);
              return 0;
          }

          https://godbolt.org/z/TbMs7YbEr
          Ответить
      • >j{1}
        прелесть какая ))

        чисто шоб сишник не понял
        Ответить
    • console.log(Array.from({length: 6}, (_, i) => Array.from({length: i + 1}, (_, j) => i + 1 - j).join('-')).join('\n'))
      Ответить
    • зачем тут контейнер?
      Ответить

    Добавить комментарий