The Dole Queue UVA
阿新 • • 發佈:2018-12-26
演算法上那本紫書.. P82
10%9是1 19%10就像是9%10 是9goto的思想..... ?其實不是很麻煩.. 寫個函式好了
然後就是一定要注意邊界... 還有比如p+d%n那個,一個是括號,另一個10 的時候試一下....
具體的寫在註釋裡了.....邊界搞清楚if possible
///練習鍵盤打字速度和減少錯誤率... 手機打字不算什麼 /// 真的..... 以後也是啊 聊天請選電腦 我的天啊啊 竟然都可以一邊摸魚一邊聊天 /// 聊2 個的同時還處理資料並A 了一道題.... 太厲害了 ///.... #include<iostream> #include<iomanip> //這程式碼可是我看完書之後自己打的!!((( // ((( // 真的效率好底我太懶了我要把手機扔了T T using namespace std; int n, m, k; int a[25]; int go(int p, int d, int t) { while (t--) { do {// 10 +-1 +1= =9 p = (p + d +n-1) % n +1;//應用到 如果p=0,d=-1的時候%n就沒了 // 然後就會卡住,但是你是%n所以加上一個無害的n就可以了 //不妨設p+d為0 兩個式子的差距顯然 ///第一個式子結果是1~n之間 第二個式子是0~(n–1)(我的天啊! //時時刻刻想著0!!!!! // 不不不不.....主要是特殊情況,比如p+d=10,如果%n就是0,但是如果是p+d+n-1%n就是n-1,再+1=10 //所以為啥不用i=0;i<n...作孽啊 } while (a[p] == 0);}//??? 如果是0 的話,繼續往下跑,直到不是0為止 //do while 的進步之處在於do裡面的至少可以迴圈一次,然後這個p是下一個要被抓走做夫妻肺片的人 //如果這個人的確又不是0,就可以滿足條件了,跳出迴圈 // 如果這個人是0,就是你經過查詢找到了夫妻肺片材料是0,不符合條件,繼續do,按相同的條件繼續進行查詢 //那麼這個判斷條件... p = (p + d + n - 1) % n + 1; ///////////////// 10-1+10-1= 8 8 +1=9 //並且 在這裡有個什麼呢,被抓走變成0 的人要退出了,不參與,這裡用do while下標就很方便 //門號還沒變,但是已經變成0 了,對你而言還是走一樣的t步數來完成使命. return p; } int main() { while (cin >> n >> k>> m&&(n!=0&&m!=0&&k!=0)) { //初始化! for (int i = 1; i <= n; i++) a[i] = i; int left = n; int p1 = n; int p2 = 1; while (left){ p1=go(p1, 1, k); p2=go(p2, -1, m); cout<<setw(3) << p1; left--; if (p1 != p2) { cout <<setw(3)<< p2 ;//不能在這輸出啊= = left--; } a[p1] = a[p2] = 0;//這都能理解,人死了錢沒花了要寫好一個=0 if (left)cout << ","; }cout << endl; } return 0; }