C語言解決了約瑟夫問題,C語言應該如何解決“約瑟夫問題”呢?

發布 科技 2024-02-11
3個回答
  1. 匿名使用者2024-02-06

    我自己寫的,直接用一維陣列求解。

    #include

    定義 n 9 總人數。

    定義 K 1 以開始計數。

    定義 m 3 個間隔。

    為陣列賦值。

    void setdate(int a,int n)int i;

    for(i=0;i=len) dm=dm-len;

    printf("最後乙個子項是 %d",a[0]);最後乙個子項放在 a[0] 中。

    main()

    int a[n];

    setdate(a,n);

    play(a,k,m);

  2. 匿名使用者2024-02-05

    #include

    #include

    typedef struct node

    int key;

    int data;

    struct node *next;

    node,*linklist;

    void initlist(linklist *l);

    void creat(linklist l,int n);

    void find(linklist l,int n);

    void main()

    linklist l;

    int n;

    printf("請輸入人數:");

    scanf("%d",&n);

    initlist(&l);

    printf("依次輸入每個人的密碼");

    creat(l,n);

    printf("請輸入您的初始密碼");

    find(l,n);

    void initlist(linklist *l)l=(linklist)malloc(sizeof(node));

    l)->next=null;

    void creat(linklist l,int n)node *s,*r;

    int i=1,t;

    r=l;while(i<=n)

    scanf("%d",&t);

    s=(node*)malloc(sizeof(node));

    s->key=t;

    s->data=i;

    r->next=s;

    r=s;i++;

    r->next=l->next;

    void find(linklist l,int n)int n,i=1,t,j=1;

    node *p,*q;

    p=l;scanf("%d",&n);

    t=n;printf("列的順序為:");

    while(j<=n)

    while(inext;

    printf("%d ",p->next->data);

    q=p->next;

    t=p->next->key;

    p->next=q->next;

    i=1;j++;

    printf("");

    這是資料結構的約瑟夫迴圈,你看,只要修改一下就行了......

  3. 匿名使用者2024-02-04

    1.為了解決這個問題,可以使用模擬數字的方法建立乙個大小為n的陣列,陣列的第n個元素表示第n個人是否還在團隊中,首先將每個元素設定為1,表示所有成員都在團隊中。 如果團隊中有第 n 個人,則第 n 個元素設定為 0。

    2.可以使用累加計數器來模擬舉報數,表示這一輪舉報人數有多少人,然後遍歷每個人,如果他們在團隊中,計數器會是+1,如果數量累積到m,那麼這個人就退出了團隊。 依此類推,直到 n-1 個人從團隊中出來,只剩下 1 個人。

    3.最後,遍歷陣列,找到仍在團隊中的人。

相關回答
9個回答2024-02-11

範圍。 你靜態字元 *chh;

static char *ch1;雖然兩個指標指向的位址沒有變化,但你有沒有想過它們指向的記憶體位址是否已經釋放,char chc[10]; 它是本地的,函式已經結束,生命週期已經結束,你正在嘗試使用 void times() 中的指標訪問它。 >>>More

6個回答2024-02-11

使用 ITOA 函式。

原型:extern char *itoa(int i); >>>More

24個回答2024-02-11

從右到左運算,-i--所以先計算-i--,運算等級比較高,所以可以寫成-(i--)i--對於8,加乙個-號,所以-i--是8,這時候i--after,i=7,然後-i++是一樣的,可以寫成-(i++)所以-i++是-7,此時i++變成8,--i,執行前減去1,所以--i是7,此時i=7,++i是一樣的,在執行i之前加上1,所以++i是8,此時i=8,然後計算i--,i--仍然等於8,那麼i減一變成7,i++,i++等於7,然後i++,i=8, 所以最後 i=8,然後依次列印出來,注意操作是從右到左,而是從左到右列印 i,i++,i--,i,--i,-i++,i-,這樣複選標記結果就出來了。

16個回答2024-02-11

1)如果你是軟體初學者,你可以在網際網絡上使用VC++,你可以下到精簡版或綠色版,這就足夠了。 >>>More

12個回答2024-02-11

這個問題需要了解系統在編譯時會給靜態變數分配記憶體,函式呼叫結束後不會釋放它們占用的記憶體單元,即變數的值是下次函式呼叫時上乙個函式呼叫的值。 >>>More