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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

约瑟夫环求出队情况

發布時間:2023/12/15 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 约瑟夫环求出队情况 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

約瑟夫環求出隊情況

問題描述 :

首先公司的全部職員圍成一個圈,然后確定一個淘汰數X,接著就從其中的一個人開始,從1數數,當數到X時,那個人就被淘汰出局,接著下一個人再從1開始數數,一直這樣重復下去,直到剩下最后一個人,那個人就是最后的大獎得主。

例如,公司有5個人,淘汰數定為2,則一開始五個人排成一圈,依次編號為:1、2、3、4、5; 首先從編號1的人開始數數,數到2后,編號2淘汰,這樣只剩下4個人:1、3、4、5; 接著從編號3的人開始數,數到2后,編號4淘汰,這樣只剩下3個人:1,3、5; 接著從編號5的人開始數,數到2后,編號1淘汰,這樣只剩下2個人:3、5; 最后從編號為3的人開始數,數到2后,編號5淘汰,最后編號為3的那個人就獲得了最終的大獎。 (注:以上的淘汰順序為2 4 1 5 3。)

問題可以歸結為:給你一個公司的人數N和一個淘汰數X,你的程序模擬上面描述的淘汰方式,輸出淘汰人的編號順序。

輸入說明 :

你寫的程序要求從標準輸入設備中讀入測試數據作為你所寫程序的輸入數據。標準輸入設備中有多組測試數據,每組測試數據僅一行,每組測試數據有兩個整數N(1<N<100)和X(0<X<10),N表示公司的人數,X表示淘汰數,兩個整數用一個空格隔開。每組測試數據與其后一組測試數據之間沒有任何空行,第一組測試數據前面以及最后一組測試數據后面也都沒有任何空行。

輸出說明 :

對于每一組測試數據,你寫的程序要求計算出一組相應的運算結果,并將這一組運算結果作為你所寫程序的輸出數據依次寫入到標準輸出設備中。每組運算結果為N個整數,即淘汰人的編號的順序,每個數之間用一個空格隔開。每組運算結果單獨形成一行數據,其行首和行尾都沒有任何空格,每組運算結果與其后一組運算結果之間沒有任何空行,第一組運算結果前面以及最后一組運算結果后面也都沒有任何空行。 注:通常,顯示屏為標準輸出設備。

輸入范例 :

5 2
5 6
99 1

輸出范例 :

2 4 1 5 3
1 3 2 5 4
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99

#include <stdio.h> int main() {int n,x;while(scanf("%d %d",&n,&x)!=EOF){int a[100]={0}; int b[100]; int i=0; int start; while(i<n) {int count=0; //記錄每輪報數for(start=0;count<x;start++) //遍歷a,報到X退出{if(a[start%n]==0) //只有在隊內的為0,已經出隊的置為1{count++;}} b[i++]=(start-1)%n+1; //題目報數從1開始,數組下標0開始//對報數取余以保證出隊的數不會越界a[(start-1)%n]=1; //將待出隊數字存到b中,同時將a中這個數置為1}for(int j=0;j<n;j++){printf("%d",b[j]);if(j!=n-1)//確保輸出最后不會有空格{printf(" ");}else{printf("\n");}}} }

總結

以上是生活随笔為你收集整理的约瑟夫环求出队情况的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。