1. 程式人生 > >順序迴圈結構(迴圈佇列)模擬約瑟夫環

順序迴圈結構(迴圈佇列)模擬約瑟夫環

#include<iostream.h>
void InQ(int Q[],int x);
void OutQ(int Q[]);
int GetHead(int Q[]);
int rear,front;
const int N=100;//支援100以下個的資料
void main()
{
 int n,m;
 cout<<"請輸入人數:";
 cin>>n;
 cout<<"請輸入數到多少出列:";
 cin>>m;
 int Q[N];
 front=0;
 rear=0;
 int count=0;
 for(int i=1;i<=n;i++)
 {
      InQ(Q,i);
 }
 while(rear!=front)
 {
  int a=GetHead(Q);
  OutQ(Q);
  InQ(Q,a);
  count++;
  if((count+1)==m)
  {
           int b=GetHead(Q);
    OutQ(Q);
       cout<<b;
     count=0;
  }
 }
}
void InQ(int Q[],int x)
 {
   if((rear+1)%N==front)
  cout<<"隊滿";
  else
  {
  rear=(rear+1)%N;
  Q[rear]=x;
  }
 }
void OutQ(int Q[])
{
  if(rear==front)
   cout<<"隊空";
  else
   front=(front+1)%N;
}
int GetHead(int Q[])
{
  if(rear==front)
  return NULL;
  else{
   return Q[(front+1)%N];
  }
}

相關推薦

順序迴圈結構迴圈佇列模擬

#include<iostream.h>void InQ(int Q[],int x);void OutQ(int Q[]);int GetHead(int Q[]);int rear,front;const int N=100;//支援100以下個的資料void

演算法C語言模擬問題

約瑟夫環問題描述 m個人圍坐一圈,每人持有一個數字,從第一個人開始從1報數,報到n(第一輪n任意給定)的人出圈,將n改為這個出圈的人所持有的數字,下個人開始從1報數,繼續報到n的人出列;依次類推直到所有

小朋友學資料結構1的連結串列解法、陣列解法和數學公式解法

約瑟夫環(Josephus)問題是由古羅馬的史學家約瑟夫(Josephus)提出的,他參加並記錄了公元66—70年猶太人反抗羅馬的起義。約瑟夫作為一個將軍,設法守住了裘達伯特城達47天之久,在城市淪陷之後,他和40名死硬的將士在附近的一個洞穴中避難。在那裡,這些

單向迴圈連結串列模擬

約瑟夫環問題,編好為1,2,3....n的個人按順時針圍坐一圈,每人手持一個密碼。一開始選定m=6,從第一個人開始順時針方向自1開始順序報數,報到m時停止報數。報m的人出列,將他的密碼作為新的m值,從他在順時針方向上的下一個人開始重新從1報數,如此下去,直至所有人全部出列為止

佇列法求解問題

#include<bits/stdc++.h> using namespace std; int main() { int n,p; cin>>n>>p; queue<int> qu; for(int i=1;i<

《大話資料結構4》—— 佇列順序儲存結構 迴圈佇列—— C++程式碼實現

   佇列  ● 佇列的概念:   佇列(簡稱作隊,Queue)也是一種特殊的線性表,佇列的資料元素以及資料元素間的邏輯關係和線性表完全相同,其差別是線性表允許在任意位置插入和刪除,而佇列只允許在其一端進行插入操作在其另一端進行刪除操作。 佇

資料結構問題迴圈單鏈表

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 解題思路:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。迴圈單鏈表:尾指標指向頭結點。這樣指標可以迴圈移動。 可以使用兩個指標來操作,將指標q指向需要操作的結點上,指標p指向需要操作結點的前

JAVA-迴圈結構除錯debug

除錯(debug) 程式中的漏洞稱為bug, 找出並修改漏洞的過程稱為debug 如何除錯? 1.設定斷點 2.啟動除錯 3.單步執行 4.觀察執行過程及變數的變化 斷點(breakpoint): 程式將暫停在斷點處 單步執行(step over | st

python3 筆記9.程式流程結構--迴圈結構while,for

#迴圈結構(2種) while for # 1. while迴圈:多次迴圈,當條件為真(True)時,則會執行迴圈語句,直到條件結果為假(False)時跳出迴圈。 '''格式: while 條件語句:

資料結構——迴圈連結串列

n個數據元素構成一個環,從環中任意位置開始計數,計到m將該元素從表中取出,重複上述過程,直至表中只剩下一個元素。 提示:用一個無頭結點的迴圈單鏈表來實現n個元素的儲存。 樣例: 輸入: 10 3 1 //分別為總數,出列的人數到的數字,開始數的人的編號。 輸出:

,魯智深吃饅頭之類的問題總結c++不用迴圈連結串列

今天看見這一類的題,覺得用迴圈連結串列太麻煩了,就想用某一種方法來代替迴圈連結串列,總結如下。 大致題意 n 個人圍城一圈,從第一個人開始順序編號為1到n。從第1個人從1開始報數,數到3的人出圈。再由下一個人從1開始報數,數到3的人出圈,如此迴圈數下去,直到最後一個人出圈。(題意都差不多

使用C語言單向迴圈連結串列來解決

題目描述 編號為1,2,…,n的n個人按順時針方向圍坐在一張圓桌周圍,每人持有一個密碼(正整數)。一 開始任選一個正整數m作為報數上限值,從第一個人開始按順時針方向自1開始報數,報到m時停止報數,報m的那 個人出列,將他的密碼作為新的m值,從他順時針方向的下一個人開始重新從1報數,

問題迴圈連結串列實現

約瑟夫環問題,n個人圍成一圈,報數到m的人出列,直至n個人全部出列,問出列人的順序 手寫迴圈連結串列模擬實現 #include<stdio.h> #include<stdlib.h> typedef struct SingleNode {

Josephus迴圈連結串列解決

關於約瑟夫環的簡單思路技巧 題目要求: 分析題目: 設編號為1,2,3,4…n的n個人順時針坐一圈,約定編號為K的人按順時針從1開始報數,數到m的人出列,他的下一位從1開始 報數… 預設第一次輸入剛開始的序號,之後選擇到誰就用誰的密碼,並把它刪掉。 思路分析:正

大話資料結構九:佇列的鏈式儲存結構佇列

1. 鏈佇列的特點: 鏈佇列其實就是單鏈表,只不過它是先進先出的單鏈表,為了實現方便,程式中設定了隊頭(front),隊尾(rear)兩個指標。 2. Java使用連結串列實現佇列:  //結點類,包含結點的資料和指向下一個節點的引用 public class N

問題迴圈連結串列

這是一道比較經典的迴圈連結串列問題,在華為上機筆試中也出現過。 約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直

問題迴圈連結串列實現C

約瑟夫環(約瑟夫問題)是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重複下去,直到圓桌周圍的人全部出列。 以下是程式碼實現(c語

問題求解迴圈連結串列法

#include <stdio.h> #include <stdlib.h> typedef struct node{ int elem; struct node *next; }NODE; int count = 0,n; void main

數據結構線性表循鏈表之

cli amp tlist isp alloc 個人 pla 初始 ont (一)前提 41個人報數,1-3,當誰報數為3,誰就去嗝屁。現在獲取他們嗝屁的順序 (二)實現結構 順序:3->1->5->2->4 (三)代碼實現 #def

迴圈佇列

此問題的要求為:n個人圍坐一圈,從第一個人開始數,每數到k,這個人就出列,圈中的下一個人重新從1開始計數,直到剩餘人數不足k人 下面我畫圖來加深理解(抱歉目前還不會用電腦繪製動畫,只好手動繪製,比較粗糙,之後有時間我改進下!!(看起來像個效果器上面的一堆旋鈕哈哈哈 下面附上完整