【基礎練習】【模擬】Uva133
阿新 • • 發佈:2018-12-26
有點點像約瑟夫的變式 注意函式形參要用逗號隔開
這個題目中ruka提供的處理環的方法很有用 可以學習一下
再一個就是出圈後相應位置賦值為零很方便
程式碼放上:
#include<cstdio> using namespace std; int n,k,m,a[22]; int go(int now,int plus,int num){ while (num--){ do{now=(now+plus+n-1)%n+1; } while (a[now]==0); } return now; } int main(){ while (scanf("%d%d%d",&n,&k,&m)==3 && n){/*n is total,k id n and m is b*/ for (int i=1;i<=n;i++) a[i]=i; int left=n; int p1=n,p2=1; while (left){ p1=go(p1,1,k); p2=go(p2,-1,m); printf("%3d",a[p1]); left--; if (a[p1]!=a[p2]) { printf("%3d",a[p2]); left--; } a[p1]=a[p2]=0; if (left) printf(","); } printf("\n"); } return 0; }
第一遍竟然WA了 還以為怎麼回事 仔細一看才發現是格式寫錯了 如果兩個人數的不同 中間不用加逗號
上述程式碼已修改
資訊組,久違了。
——唱徹《陽關》淚未乾,功名餘事且加餐。