1334:【例2-3】圍圈報數時間限制: 1000 ms 內存限制: 65536 KB 提交數: 2253 經過數: 1482 【題目描述】有nn我的依次圍成一圈,從第11我的開始報數,數到第mm我的出列,而後從出列的下一我的開始報數,數到第mm我的又出列,…,如此反覆到全部的人所有出列爲止。設nn我的的編號分別爲1,2,…,n1,2,…,n,打印出列的順序。php 【輸入】nn和mm。ios 【輸出】出列的順序。spa 【輸入樣例】4 17 【輸出樣例】1 3 4 2 【提示】n≤100n≤100。code 【來源】一本通 |
解析:blog
如果使用鏈表,這題的複雜程度無疑大大上升了,其實,咱們徹底用不着那麼麻煩,一個個地報數,能夠想象成一個隊列,一我的報完數後,判斷他所報的數是否是出局的數,若是是,直接彈出,但若不是,將其移動至隊尾便可。隊列
咱們使用一個隊列q進行模擬,在讀取總人數和出局數字後,把這些人一個個地壓入隊列尾部。在使用隊列以前,須要先加上頭文件queue。內存
1 #include<cstdio> 2 #include<iostream> 3 #include<queue> 4 using namespace std; 5 queue<int>q; 6 int i,j,k; 7 int n,m,now=1; 8 using namespace std; 9 int main() 10 { 11 scanf("%d%d",&n,&m); //讀取數據 12 for(i=1;i<=n;i++) //初始化隊列 13 q.push(i); 14 while(!q.empty()) //在隊列不爲空時繼續模擬 15 { 16 if(now==m) 17 { 18 printf("%d ",q.front() ); //打印出局的人的編號 19 q.pop(); //出局 20 now=1; //初始化如今的數字 21 } 22 else 23 { 24 now++; 25 q.push(q.front()); //排至隊尾 26 q.pop();; 27 } 28 } 29 return 0; 30 }
推薦類似題:get
若是還有興趣,請體驗:io