1. 程式人生 > >OI養老專題01:約瑟夫問題

OI養老專題01:約瑟夫問題

過去 through 一個空格 之間 bsp 依次 下一個 res 循環

  有M個人,其編號分別為1-M。這M個人按順序排成一個圈。現在給定一個數N,從第一個人開始依次報數,數到N的人出列,然後又從下一個人開始又從1開始依次報數,數到N的人又出列...如此循環,直到最後一個人出列為止。

  輸入只有一行,包括2個整數M(8 <= M <= 15 ),N( 5 <= N <= 32767 )。之間用一個空格分開。

  輸出M行,每行一個整數,表示每次出列的人的編號。


  好養老的一道經典題啊......為什麽不回憶一下剛學OI時的愚鈍,暴力模擬一下呢?反正剛學OI時也是這麽做的......

  一開始想用指針,但是發現敲不來(菜);然後改用鄰接表,發現也敲不來......反正這麽菜,幹脆打vis數組好了,遇到vis[i]=1就跳過:

for(int i=1,cnt=1,res=m;res>=1;i=i%n+1) if(!vis[i]){
    if(!cnt) printf("%d\n",i),vis[i]=true,res--;
    cnt=(cnt+1)%n;
}

  是不是很養老~反正這個數據範圍的題是水得過去的。

OI養老專題01:約瑟夫問題