Помогите! соdеwаrs c++

задача:

Take a number: 56789. Rotate left, you get 67895.

Keep the first digit in place and rotate left the other digits: 68957.

Keep the first two digits in place and rotate the other ones: 68579.

Keep the first three digits and rotate left the rest: 68597. Now it is over since keeping the first four it remains only one digit which rotated is itself.

You have the following sequence of numbers:

56789 -> 67895 -> 68957 -> 68579 -> 68597

and you must return the greatest: 68957.

Task Write function max_rot(n) which given a positive integer n returns the maximum number you got doing rotations similar to the above example.

и мой код:

#include <string>
#include <vector>
#include <sstream>
using namespace std;

class MaxRotate
{
public:
  static long long maxRot(long long n) {
    vector<char> n_char = new vector<char>;
    vector<long long> total_arr;
    string ntos = to_string(n);
    istringstream StoC(ntos);
    while (StoC) {
      n_char.push_back(StoC);
    }
    // first operation
    n_char.front() = n_char.end();
    total_arr.push_back(stoi(to_string(n_char)));
    // second operation
    n_char[1] = n_char.end();
    total_arr.push_back(stoi(to_string(n_char)));
    // third operation
    n_char[2] = n_char.end();
    total_arr.push_back(stoi(to_string(n_char)));
    // fourth operation
    n_char[3] = n_char.end();
    total_arr.push_back(stoi(to_string(n_char)));
    //returning the greatest
    long long g;
    for (int i = 0; i < (int)total_arr.size(); i++) {
      if (i == 0) {
        g = total_arr[0];
      }
      else {
        if (g < total_arr[i]) {
          g = total_arr[i];
        }
      }
    }
    return g;
  }
};

Я очень долго пытаюсь написать этот код, но с каждым разом только больше и больше ошибок.


Ответы (1 шт):

Автор решения: Harry

Думаю, что самый простой (не самый эффективный, но самый простой) способ такой:

int max_rot(int m)
{
    string n = to_string(m);
    for(auto it = n.begin(); it != n.end(); ++it)
    {
        rotate(it,it+1,n.end());
        int res = stoi(n);
        if (res > m) m = res;
    }
    return m;
}

Но все же давайте вы будете работать над этими задачами самостоятельно.

Пожалуй, вам стоит для начала ("Я начал учить срр только несколько дней назад") решать какие-то задачи попроще.

→ Ссылка