程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 編程綜合問答 >> 應用-C/C++ 約瑟夫環問題

應用-C/C++ 約瑟夫環問題

編輯:編程綜合問答
C/C++ 約瑟夫環問題

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

 #include<stdio.h>
typedef struct
{
    int data[10];
    int front;
    int rear;
}CirQueue;
void InitQueue(CirQueue &Q)
{
    Q.front=Q.rear=0;
}
int InQueue(CirQueue &Q,int x)
{
    if((Q.rear+1)%10==Q.front) return 0;
    Q.data[Q.rear]=x;
    Q.rear=(Q.rear+1)%10;
    return 1;
}
int DelQueue(CirQueue &Q,int x)
{
    if(Q.front==Q.rear) return 0;
    x=Q.data[Q.front];
    Q.front=(Q.front+1)%10;
    return 1;
}
void Js(int n,int a)
{
    CirQueue S;
    int x=1,i=0;
    while((S.rear+1)!=S.front)
    {
        i++;
        if(i==a)
        {
            InQueue(S,x);
            i=0;
        }
        x++;
    }
    while(S.front!=S.rear)
    {
        DelQueue(S,x);
        printf("%d ",x);
    }
}
void main()
{
    Js(10,3);
}

沒有語法報錯,不能正常運行求看程序

最佳回答:


void Js(int n,int a)
{
CirQueue S;
int x=1,i=0;
while((S.rear+1)!=S.front)
{
i++;
if(i==a)
{
InQueue(S,x);
i=0;
}
x++;
}
while(S.front!=S.rear)
{
DelQueue(S,x);
printf("%d ",x);
}
}
你就沒仔細看一下代碼!
第一沒初始化!
第二隊列不是這樣用的!
第三假設初始化了,也就是調用了InitQueue()函數,第一個循環什麼時候會讓S.rear成為-1然後 while ((S.rear + 1) != S.front)不成立結束循環?
第四假設你把 while ((S.rear + 1) != S.front)改成了 while (((S.rear + 1) % 10 )!= S.front),你這也不是解約瑟夫問題的算法吧!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved