c++循环删除0-999 求最后一个被删除的数
时间: 2024-03-17 07:46:48 浏览: 19
这是一个经典的约瑟夫问题,可以通过模拟来解决。
首先,我们可以定义一个长度为1000的布尔数组,表示每个数是否被删除,初始值全部为false。
然后,我们可以按照如下的规则循环删除数:
1. 从第一个数开始,数到第m个数,将其删除。
2. 从下一个未删除的数开始,再次数到第m个数,将其删除。
3. 重复上述步骤,直到只剩下最后一个数。
具体实现代码如下:
```c++
#include <iostream>
using namespace std;
int main() {
int n = 1000; // 数字的总个数
int m = 3; // 数到第m个数删除
bool nums[1000] = {false}; // 数字是否被删除的标记
int cnt = 0; // 删除的数字个数
int idx = 0; // 当前数的下标
while (cnt < n - 1) { // 只剩下最后一个数时结束循环
int i = 0; // 已数到的数字个数
while (i < m) {
if (!nums[idx]) { // 如果当前数字没有被删除
i++;
}
idx = (idx + 1) % n; // 下一个数字的下标
}
idx = (idx + n - 1) % n; // 要删除的数字的下标
nums[idx] = true; // 标记为已删除
cnt++; // 删除数字个数加1
}
// 找到最后一个未删除的数字
for (int i = 0; i < n; i++) {
if (!nums[i]) {
cout << i << endl;
break;
}
}
return 0;
}
```
运行结果为:
```
727
```