【发布时间】:2021-12-19 11:39:59
【问题描述】:
我目前正在练习算法和 DS。我偶然发现了一个我无法弄清楚如何解决的问题。所以问题的链接是there:
总而言之,就是说有几把椅子围成一圈,人的位置(相对于某把椅子),他应该做多少M个动作。
所以输入如下:
3个整数 N, M, X , 椅子的数量, 男孩应该移动的次数和他将开始的第一把椅子( 1 ≤ X ≤ N
那么,到目前为止我做了什么?我想到了以下几点:
所以我认为M移动后的相对位置是(x+m)%n,由于这会导致Integer溢出,所以我就这样做了,((x%n) + (m%n)) % n。我发现如果这个人已经到达椅子的最后一个索引,它将是 0,所以我处理了这个。但是,它只通过了 2 次测试。我不需要编写任何代码,我想以正确的思维方式进行指导。到目前为止,这是我的代码:
#include <iostream>
using namespace std;
int main() {
long long n, m, x;
cin >> n >> m >> x;
// After each move, he reaches (X+1).
// X, N chairs.
// ((X % N) + (M % N)) % N;
// Odd conideration.
if ( m % 2 == 1) {
m += 1;
}
long long position = (x % n + m % n) % n;
if (position == 0) {
position = n;
}
cout << position;
return 0;
}
【问题讨论】:
-
(x+m) %n,既然这样会导致StackOverflow呢?你的意思是整数溢出吗?
-
@Scheff'sCat 对不起,我的意思是整数溢出。
-
您知道负数
% n会导致负数吗? (不确定这是否相关......) -
感谢您的评论!这不是相对的,因为问题约束都是正数,我想过这个,但这不是相对的:)
-
对于
long long,不排除负数。 (我没有点击链接,你也没有在你的问题中提到这一点。)
标签: c++ algorithm data-structures