约瑟夫问题 算法很简单保证每个人都能看懂用的是模拟现实 用数组实现 利用循环删除数组中的元素

时间:2022-01-16 20:31:46
#include<iostream>
using namespace std;

const int size = 1000;
void ArrDel()
{
int arr[size];
//循环结束标志,一直循环到数组中只剩下最后一个元素结束
int currentNum = size;
int count = 0;
for (int k = 0; k < size; k++)
{
arr[k] = k;
}
//currentNum==1表示数组中只剩下最后一个元素 是循环结束的标志
for (int i = 0; currentNum != 1; i = (i + 1) % 1000)
{
if (arr[i] != -1)
{
if (count >= 0 && count < 2)
{
count++;
}
//else if(count%3==0)
else if (count==2)
{
//当数组的值为-1是表示数组的元素被删除
arr[i] = -1;
currentNum--;
//实现每次查三个删除第三个元素
count = 0;
}
}
}
//遍历操作后的数组
for (int i = 0; i < 1000; i++)
{
if (arr[i] != -1)
{
printf("%d", arr[i]);
}
}
}
void main()
{
ArrDel();
system("pause");
}