如何检查这是否是一个不增加的序列。

时间:2018-02-03 23:35:14

标签: c++

我接到一个c ++任务来接收一串数字。
我要做的是将该数字的第一个数字移动到最后一个数字。
例如,如果数字是1234,那么它应该是2341。
我还要做的是使数字序列不增加。
为了更好地理解,我需要做的是:
输入:
1934年 7815
1894年 6518
3281

在第一个示例中,我们将执行以下操作:

1 move on x1 : 1934 -> 9341
1 move on x2 : 7815 -> 8157
3 move on x3 : 1894 -> 8941 -> 9418 -> 4189
2 move on x4 : 6518 -> 5186 -> 1865
3 move on x5 : 3281 -> 2813 -> 8132 -> 1328
The final sequence will be 9341 ≥ 8157 ≥ 4189 ≥ 1865 ≥ 1328.

如果可以像这样生成非增加的序列,程序应该打印是,否则我应该打印否。
这是我尝试过的:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int main() {


    string s[5];

     for (int i = 0; i < 5; i++)
    {
        cin >> s[i];
    }
    for (int j = 0; j < 5; j++)
{
            rotate(s[j].begin(), s[j].begin() + 1, s[j].end());

        }
    for (int j = 2; j < 5; j++){
        while (s[j-1] <= s[j]){
                rotate(s[j].begin(), s[j].begin() + 1, s[j].end());



        }

    }

        for (int i = 0; i < 5; i++)
        cout << s[i] << endl;
}

我做了所有动作,然后打印出来,我不知道如何检查是否可以制作不增加的序列。另外,根据我的逻辑,如果我不能创建一个非增加的序列,while循环可能是无限循环,如何解决?感谢。

1 个答案:

答案 0 :(得分:1)

这是解决此问题的一种方法:

  • 将第一个数字旋转到最大可能值。

    e.g。对于数字1894,有4种可能的轮换:{1894, 8941, 9418, 4189}。最大的一个是9418

  • 对于其余数字,将它们旋转到最大可能值,该值等于或小于前一个数字的所选旋转。如果没有这样的旋转那么序列是不可能的。

对于你的例子:

  • 1934:最大轮播为9341
  • 7815:最大轮换<= 93418157
  • 1894:最大轮换<= 81574189
  • 6518:最大轮换<= 41891865
  • 3281:最大轮换<= 18651328