1334:【例2-3】圍圈報數

1334:【例2-3】圍圈報數


時間限制: 1000 ms         內存限制: 65536 KB
提交數: 2253     經過數: 1482 

【題目描述】

n我的依次圍成一圈,從第1我的開始報數,數到第m我的出列,而後從出列的下一我的開始報數,數到第m我的又出列,…,如此反覆到全部的人所有出列爲止。設n我的的編號分別爲12n1,2,…,n,打印出列的順序。php

【輸入】

nn和mm。ios

【輸出】

出列的順序。spa

【輸入樣例】

4 17

【輸出樣例】

1 3 4 2

【提示】

n100n≤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

P1996 約瑟夫問題

若是還有興趣,請體驗:io

圍圈報數(加強版)

相關文章
相關標籤/搜索