1. 程式人生 > >1334:【例2-3】圍圈報數

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

題目描述】

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

【輸入】

n和m。

【輸出】

出列的順序。

【輸入樣例】

4 17

【輸出樣例】

1 3 4 2

用陣列實現鏈式結構

#include<bits/stdc++.h>
using namespace std;

int s[100];
int main()
{
    int n,m;
    scanf("%d %d",&n,&m);
    for(int i=1;i<n;i++) s[i]=i+1;//建立連結串列
    s[n]=1;//把最後一個指向第一個
    int p=n;
    int k=0;
    for(int i=0;i<n;i++){//每次迴圈出一個人,所以迴圈n次
        for(int j=0;j<m-1;j++){//報數,這裡就報m-1次,以為s[p]指向的是下一位
           p=s[p];
        }
        printf("%d ",s[p]);
        s[p]=s[s[p]];//把報數的那個結點去掉
    }
    return 0;
}

還可以用迴圈佇列的思想做這題

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    cin>>n>>m;
    queue<int>Q;
    for(int i=1;i<=n;i++) Q.push(i);
    int flag=1;
    while(!Q.empty()){
         if(flag%m==0){
            cout<<Q.front()<<" ";
            Q.pop();
         }
         else{
            Q.push(Q.front());
            Q.pop();
         }
         flag++;

    }

    return 0;
}
#include<bits/stdc++.h>
using namespace std;
int s[100];
int main()
{
    int n,m;
    cin>>n>>m;
    for(int i=1;i<=n;i++) s[i]=i;
    int head=1,tail=n;
    int flag=1;
    while(head<=tail){
        if(flag==m){
           flag=1;
           cout<<s[head]<<" ";
           head++;
        }
        else{
            flag++;
            int p=s[head];
            s[++tail]=p;
            head++;

        }

    }
    return 0;
}

連結串列實現 (90分有能看出來錯誤的望告知)

#include<bits/stdc++.h>
using namespace std;
struct node
{
    int d;
    node *next;
};
node *head,*p,*r;
int main()
{
    int n,m;
    cin>>n>>m;
    head=new node;
    head->d=1;
    head->next=NULL;
    r=head;
    for(int i=2;i<=n;i++){
        p=new node;
        p->d=i;
        p->next=NULL;
        r->next=p;
        r=p;
    }
    r->next=head;
    r=head;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m-2;j++) r=r->next;
        cout<<r->next->d<<" ";
        r->next=r->next->next;
        r=r->next;
    }
    cout<<endl;
    return 0;
}

相關推薦

13342-3報數

題目描述】 有n個人依次圍成一圈,從第1個人開始報數,數到第m個人出列,然後從出列的下一個人開始報數,數到第m個人又出列,…,如此反覆到所有的人全部出列為止。設n個人的編號分別為1,2,…,n,打印出

13322-1周末舞會

print namespace i++ std 周末 結束 c++ tro 基礎 【題目描述】 假設在周末舞會上,男士們和女士們進入舞廳時,各自排成一隊。跳舞開始時,依次從男隊和女隊的隊頭上各出一人配成舞伴。規定每個舞曲能有一對跳舞者。若兩隊初始人數不相同,則較長的那一隊

6.3刪數問題(Noip1994)

logs lan cin clas pac i++ wlan 描述 status 【例6.3】刪數問題(Noip1994) 鏈接:http://ybt.ssoier.cn:8088/status.php?start=0&showname=edsheeran&

TP3.2.3微信網頁授權--基類

重新 exec 進入 index.php sset AR 關註 fun func 非常好用的微信授權 基類:其他的微信權限類都可以繼承至該類: <?php namespace Wechat\Controller; use Think\Controller;

13464-7親戚(relation)

並查集的模板題: #include<iostream> #include<cstdio> using namespace std; const int maxn = 2e4+5; int fa[maxn]; int find(int x) { return fa[x]

13226.4攔截導彈問題(Noip1999)

【題目描述】某國為了防禦敵國的導彈襲擊,開發出一種導彈攔截系統,但是這種攔截系統有一個缺陷:雖然它的第一發炮彈能夠到達任意的高度,但是以後每一發炮彈都不能高於前一發的高度。某天,雷達捕捉到敵國的導彈來襲,由於該系統還在試用階段。所以一套系統有可能不能攔截所有的導彈。輸入導彈依

12649.8合唱隊形

【題目描述】 NN位同學站成一排,音樂老師要請其中的(N−K)(N−K)位同學出列,使得剩下的KK位同學排成合唱隊形。 合唱隊形是指這樣的一種隊形:設KK位同學從左到右依次編號為1,2,…,K1,2,…,K,他們的身高分別為T1,T2,…,TKT1,T2,…,TK,則他們的身高滿足T1<

12629.6挖地雷

題目描述】 在一個地圖上有n個地窖(n≤200),每個地窖中埋有一定數量的地雷。同時,給出地窖之間的連線路徑,並規定路徑都是單向的,且保證都是小序號地窖指向在序號地窖,也不存在可以從一個地窖出發經過若干地窖後又回到原來地窖的路徑。某人可以從任一處開始挖地雷,然後沿著指出的連線往下挖(僅能選擇一條

12619.5城市交通路網

1261:【例9.5】城市交通路網 時間限制: 1000 ms         記憶體限制: 65536 KB 提交數: 1387     通過數: 1029  【題目描述】 下圖表示城

13196.1排隊接水

這題要注意的是隻求前9個數,因為是等待的時間所以和書上的例題有點區別#include<bits/stdc++.h> using namespace std; struct node {

13246.6整數區間

描述 struct 接下來 -s return idt 空格 時間限制 continue 1324:【例6.6】整數區間 時間限制: 1000 ms 內存限制: 65536 KB提交數: 1614 通過數: 1020 【題目描述】 請編程完

10.2.3ArcGIS Runtime for Android搭建開發環境過程中問題具體解釋

click soft oca cati navigate star ini available 以及 一、Visual Studio Ultimat

13474-8格子遊戲

define 重復 esp 描述 using c++ bob namespace raw 【題目描述】 Alice和Bob玩了一個古老的遊戲:首先畫一個n × n的點陣(下圖n = 3) 接著,他們兩個輪流在相鄰的點之間畫上紅邊和藍邊: 直到圍成一個封閉的圈(面積不

13494-10最優布線問題

syn 負責 nod using 通過 als 計算機 esp register 【題目描述】 學校有n臺計算機,為了方便數據傳輸,現要將它們用數據線連接起來。兩臺計算機被連接是指它們有數據線連接。由於計算機所處的位置不同,因此不同的兩臺計算機的連接費用往往是不同的。 當

13123.4昆蟲繁殖(遞推演算法)

每對成蟲過x個月產y對卵,每對卵要過兩個月長成成蟲。假設每個成蟲不死,第一個月只有一對成蟲,且卵長成成蟲後的第一個月不產卵(過X個月產卵),問過Z個月以後,共有成蟲多少對?0≤X≤20,1≤Y≤20,X≤Z≤50。 在這裡其實,只知道是類似斐波拉契數列的一類的遞推公式,也就是經典的兔子問題。   第i天的

Python基礎03 序列引用 2數軸、長整型

       簡述:企業發放的獎金根據利潤提成。利潤(I)低於或等於10萬元時,獎金可提10%;利潤高於10萬元,低於20萬元時,低於10萬元的部分按10%提成,高於10萬元的部分,可提成7.5%;20萬到40萬之間時,高於20萬元的部分,可提成5%;40萬到60萬之間時高

13311-2字尾表示式的值

//洛谷ac,一本通10分,一本通應該是覺得這個題目不需要用stl吧,棧的應用用stl可能結構清晰點 #include<iostream> #include<stack> #include<cstdio> #include<cstri

2-2Blah數集

個數字 col ios 有趣 限制 沒有 現在 ems int 【例2-2】Blah數集 鏈接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1333時間限制: 1000 ms 內存限制: 65536 KB

Python學習2Python之數據類型

msg ear sleep abc 命令 play bbbb 朋友 == 數字類型和字符串類型 1.bin()函數將十進制轉換成而進制 2.oct()函數將十進制轉換成八進制 3.hex()函數將十進制轉換成十六進制     十六進制表示:0-9 a b c

Python學習2Python之數據類型(2

append 但是 iss 代碼 key 常用方法 uber ner ces 元組 #為何要有元組,存放多個值,元組不可變,更多的是用來做查詢 t=(1,[1,3],‘sss‘,(1,2)) #t=tuple((1,[1,3],‘sss‘,(1,2))) #