我用三種不同的演算法來做的:
/*求圍圈問題的詳細演算法和程式*/
/*n人圍成一圈,編號為1,2,3,……,17,從1開始報數,報到m的倍數的人離開,
一直下去,直到最後剩下1人,求此人的編號 */
#include
#include
int main(void)
for (i = 0; i < n; i++)
i = 0; //從下標為 i%n 的元素開始數數
j = 0; //記錄已經退出的元素的個數
s = n; //記錄尚未退出的元素的個數
while(s > 1)
}else //如果元素值為0,則表示其已經退出
j++; //此時i值仍然會累加,但我們記下這個已經退出的元素 ,以便報數時跳過它
i++;
}for(i=0; i/*求圍圈問題的詳細演算法和程式*/
#include
#include
int main(void)
for (i = 0;i < n;i++)
printf("出列順序:/n");
j = s + m - 2; /* 這是第乙個要出列的人的下標 */
while (n > 1) /* 當佇列中還有不止乙個人的時候,要就進行出列的動作 */
n--; /* 並且整個佇列的人少了乙個,也就是長度要減掉一 */
/* 這是下乙個要出列的人 */
j = (j + m - 1) % n;
}/* 現在只有乙個人了,就是arr[0] */
printf("最後乙個是:%d/n",arr[0]);
free(arr); /* 記得要釋放申請的空間 */
system("pause");
return 0;
}/*求圍圈問題的詳細演算法和程式*/
/*n人圍成一圈,編號為1,2,3,……,17,從1開始報數,報到m的倍數的人離開,
一直下去,直到最後剩下1人,求此人的編號 */
#include
#include
int main(void)
for (i = 0; i < n; i++)
i = 0;
j = 0; //報數
s = n; //記錄尚未退出的元素的個數
while(s > 1)
} i++;
}for(i=0; iif(a[i] != 0)
printf("最後乙個是:%d/n",a[i]);
free(a); /* 記得要釋放申請的空間 */
system("pause");
return 0;
}
求圍圈問題的詳細演算法
我用三種不同的演算法來做的 求圍圈問題的詳細演算法和程式 n人圍成一圈,編號為1,2,3,17,從1開始報數,報到m的倍數的人離開,一直下去,直到最後剩下1人,求此人的編號 include include int main void for i 0 i n i i 0 從下標為 i n 的元素開始數...
求圍圈問題的詳細演算法和程式
17人圍成一圈,編號為1,2,3,17,從1開始報數,報到3的倍數的人離開,一直下去,直到最後剩下1人,求此人的編號 include include int main void int i,count,s for i 0 i 17 i i 0 s 17 用來記錄退出圈外的人的數目 count 0 計...
Google PR值的詳細演算法
假設乙個由4個頁面組成的小團體 a,b,c 和 d。如果所有頁面都鏈向a,那麼a的pr pagerank 值將是b,c 及d的和。pr a pr b pr c pr d 繼續假設b也有鏈結到c,並且d也有鏈結到包括a的3個頁面。乙個頁面不能投票2次。所以b給每個頁面半票。以同樣的邏輯,d投出的票只有...