這篇文章主要介紹了C++中約瑟夫環(huán)的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
成都創(chuàng)新互聯(lián)公司成立與2013年,先為靜安等服務(wù)建站,靜安等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為靜安企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
約瑟夫環(huán)是一個(gè)數(shù)學(xué)的應(yīng)用問題:已知n個(gè)人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報(bào)數(shù),數(shù)到m的那個(gè)人出列;他的下一個(gè)人又從1開始報(bào)數(shù),數(shù)到m的那個(gè)人又出列;依此規(guī)律重復(fù)下去,直到圓桌周圍的人全部出列。
分析:有n個(gè)人,要想所有的人都退出去,只有每個(gè)人喊到m,才可以退完,所以可以算出,n*m為所有人總共報(bào)數(shù)的總次數(shù)。
代碼:
/* * 約瑟夫出圈 */ #includeint main() { char peo[100] ; char *p_peo = peo; int i , n , skip , flag[100] = {0} , cnt; int *p_flag = NULL; printf("請輸入人數(shù):"); scanf("%d", &n); printf("所有人如下:\n"); for(p_peo , i = 0 ; p_peo < peo + n ; ++p_peo , ++i) { *p_peo = 'a' + i; printf("%c ", *p_peo); } printf("\n"); printf("請輸入報(bào)數(shù)值:"); scanf("%d", &skip); cnt = 0; while(cnt <= n * skip) { for(p_peo = peo , p_flag = flag ; p_peo < peo + n ; ++p_peo , ++p_flag) { if(*p_flag) continue; cnt++; if(!(cnt % skip)) { *p_flag = 1; printf("%c ", *p_peo); } } } printf("\n"); return 0; }
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“C++中約瑟夫環(huán)的示例分析”這篇文章對大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!