日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

循环队列解决约瑟夫问题

發(fā)布時(shí)間:2024/9/5 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 循环队列解决约瑟夫问题 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

n個(gè)人圍成一圈,從第1個(gè)人開(kāi)始,12,…,m報(bào)數(shù),報(bào)至m出局,余下的人繼續(xù)從12,…,m報(bào)數(shù),重復(fù)之前的流程,要求:求出被淘汰編號(hào)的序列,及最后剩下的一人是

原來(lái)的第幾號(hào)?(要求:用循環(huán)隊(duì)列解決該問(wèn)題。)

?

#ifndef STATUS_H #define STATUS_H#define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define INFEASIBLE -1 #define OVERFLOW -2 typedef int Status;#endif

?

#include <iostream> using namespace std; #include "Status.h" typedef int ElemType; typedef struct { ElemType *base; int front; int rear; int MAXSIZE; }SqQueue; Status InitQueue(SqQueue& Q,int n) //初始化隊(duì)列 { Q.base = new ElemType[100]; if(!Q.base) { cout << "創(chuàng)建隊(duì)列失敗!"; return ERROR; } Q.front=Q.rear=0; Q.MAXSIZE = n+1;//MAXSIZE是總?cè)藬?shù)+1,是為了留出一個(gè)空位置來(lái)放置rear return OK; } void QueueTraverse(SqQueue Q) //遍歷隊(duì)列 { int i; i=Q.front; while(i!=Q.rear) { cout<<Q.base[i]<<" "; i=(i+1)%Q.MAXSIZE; } cout<<endl; } Status EnQueue(SqQueue& Q,ElemType e) //入隊(duì) { if((Q.rear+1)%Q.MAXSIZE==Q.front) { cout << "隊(duì)列已滿!"; return ERROR; } Q.base[Q.rear] = e; Q.rear = (Q.rear+1)%Q.MAXSIZE; return OK; } Status DeQueue(SqQueue& Q,ElemType& e) //出隊(duì) { if(Q.front==Q.rear) { cout << "隊(duì)列為空!"; return ERROR; } e = Q.base[Q.front]; Q.base[Q.front] = 0; Q.front = (Q.front+1)%(Q.MAXSIZE-1);//總?cè)藬?shù)為MAXSIZE-1return OK; }int main() { int n,m,i=1; SqQueue Q; ElemType e; cout << "請(qǐng)輸入n個(gè)人(n<=100):";do{ cin >> n; if(n>100 || n<1) { cout << "輸入人數(shù)錯(cuò)誤!請(qǐng)重新輸入:"; } }while(n>100 || n<1);InitQueue(Q,n); while(i<=n)//入隊(duì)操作 { EnQueue(Q,i); i++; } cout << "\n此時(shí)的序列順序?yàn)?#xff1a;"<<endl; QueueTraverse(Q); cout << "\n請(qǐng)輸入第m個(gè)人出隊(duì)(1<=m<=n):"; do{ cin >> m; if(m>n || m<1) { cout << "m輸入錯(cuò)誤!請(qǐng)重新輸入:"; }}while(m>n || m<1);cout << endl; int Count = n;//用來(lái)記錄剩下的人數(shù) while(Count != 1) { i = 1;//i用來(lái)控制是第幾個(gè)人報(bào)數(shù) while(i != m)//當(dāng)i的值不等于m的值時(shí) { Q.front = (Q.front+1)%(Q.MAXSIZE-1);//總?cè)藬?shù)為MAXSIZE-1 if(Q.base[Q.front] != 0)//當(dāng)此時(shí)不為0的話,i++用來(lái)控制第幾個(gè)人 { i++; } } DeQueue(Q,e); while(Q.base[Q.front] == 0)//當(dāng)此時(shí)為0的時(shí)候,循環(huán)找到下一個(gè)不為0的位置 { Q.front = (Q.front+1)%(Q.MAXSIZE-1); } cout << "序號(hào):" << e << "出局!\n"; Count--; } DeQueue(Q,e); cout << "\n最后一個(gè)是:" << e << endl; return 0; }

?

?

1.? n個(gè)人圍成一圈,從第1個(gè)人開(kāi)始,12,…,m報(bào)數(shù),報(bào)至m出局,余下的人繼續(xù)從12,…,m報(bào)數(shù),重復(fù)之前的流程,要求:求出被淘汰編號(hào)的序列,及最后剩下的一人是原來(lái)的第幾號(hào)?(要求:用循環(huán)隊(duì)列解決該問(wèn)題。)

轉(zhuǎn)載于:https://www.cnblogs.com/luoyanghao/p/6197664.html

總結(jié)

以上是生活随笔為你收集整理的循环队列解决约瑟夫问题的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。