#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"); }
约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素,布布扣,bubuko.com
约瑟夫问题 算法很简单保证每隔人都能看懂用数组实现 利用循环删除数组中的元素
原文地址:http://blog.csdn.net/han1558249222/article/details/25656709