https://www.cnblogs.com/lanxuezaipiao/p/3339603.html
有N個人圍一圈依次報數,數到3的倍數的人出列,問當只剩一個人時他原來的位子在哪里?
解答:經典的轉圈踢人問題,好吧專業一點,約瑟夫環問題,相信大家都會,下面給我的code:
int main() {int N, i, j;printf("Please enter the number of people(N): ");scanf("%d", &N);int *pArray = (int *)malloc(sizeof(int) * N);int count = 0;// 這里編號為0 ~ N - 1for(i = 0; i < N; i++){pArray[i] = i;}for(i = 0, j = 0; i < N; i = (i + 1) % N){if(pArray[i] != -1){j++;if(j % 3 == 0){pArray[i] = -1;count++;if(count == N){printf("The last people is %d\n", i);break;}}}}return 0; }
好吧,我承認我的算法很臃腫,完全是模擬了整個游戲過程,時間復雜度為O(mn),這里m=3,網上有個大牛給出了歸納數學的方法,具體方法如下: